import { getServerOrgCode } from '@/lib/org'
import { getNewsList } from '@/sanity/cms'
import { organizationService } from '@/services/organization/organizationService'
import { unstable_cache } from 'next/cache'
import NewsCard from '@/modules/newsModule/components/NewsCard'

export const dynamic = 'force-static' // gunakan ISR
export const revalidate = 60 // fallback 60s; source of truth via tag

export default async function NewsModule({ orgCode }: { orgCode: string }) {
  
  // cache per org dengan tag yang bisa di-revalidate oleh webhook
  const fetchNews = unstable_cache(
    async () => getNewsList(orgCode, "web." + orgCode),
    ['news', orgCode],
    { tags: [`news:${orgCode}`] }
  )

  const items = await fetchNews()

  return (
    <main className="mx-auto max-w-7xl px-4 py-8 sm:px-6 lg:px-8">
      <div className="mb-6 flex items-end justify-between">
        <div>
          <h1 className="text-2xl font-semibold text-slate-900 dark:text-slate-100">News</h1>
          <p className="mt-1 text-sm text-slate-600 dark:text-slate-400">Kabar terbaru dan pengumuman untuk pengguna.</p>
        </div>
      </div>

      {items && items.length > 0 ? (
        <div className="grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3">
          {items.map((n: any) => (
            <NewsCard key={n._id} item={n} />
          ))}
        </div>
      ) : (
        <div className="flex h-60 flex-col items-center justify-center rounded-lg border border-dashed border-stroke dark:border-strokedark">
          <div className="text-center">
            <h3 className="text-lg font-medium text-slate-900 dark:text-slate-100">Belum ada berita</h3>
            <p className="mt-1 text-slate-500 dark:text-slate-400">Silakan kembali lagi nanti.</p>
          </div>
        </div>
      )}
    </main>
  )
}


async function resolveOrganization() {
  let sub = await getServerOrgCode();
  if (sub?.includes('-')) {
    sub = sub.replace(/-/g, '_');
  }
  const org = await organizationService.fetchByCode(sub || "");

  if (!org) {
    return { organization: null, notFound: true };
  }
  return { organization: org, notFound: false };
}
