"use client";

import { useEffect, useState } from "react";
import { useRouter } from "next/navigation";

const REFRESH_INTERVAL_MS = 6 * 60 * 60 * 1000;

export default function OptimizerAdsSync({ userId, shopId, dateFrom, dateTo }: {
  userId: string;
  shopId: string;
  dateFrom: string;
  dateTo: string;
}) {
  const router = useRouter();
  const [status, setStatus] = useState<string | null>(null);

  useEffect(() => {
    const key = `sfs:optimizer-ads-sync:v2:${userId}:${shopId}:${dateFrom}:${dateTo}`;
    const last = Number(window.localStorage.getItem(key) || "0");
    if (Number.isFinite(last) && Date.now() - last < REFRESH_INTERVAL_MS) return;
    let cancelled = false;
    window.localStorage.setItem(key, String(Date.now()));
    queueMicrotask(() => {
      if (!cancelled) setStatus("Memperbarui performa iklan Shopee untuk periode ini…");
    });

    void fetch("/api/optimizer/sync-ads", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ shopId, dateFrom, dateTo }),
    }).then(async (response) => {
      const result = await response.json().catch(() => null) as {
        ok?: boolean;
        rows?: number;
        permissionMissing?: boolean;
        errors?: string[];
        error?: string;
      } | null;
      if (cancelled) return;
      if (result?.permissionMissing) {
        setStatus("Metrik iklan belum tersedia: izin Shopee Ads pada aplikasi belum aktif.");
      } else if (!response.ok || !result?.ok) {
        setStatus(result?.rows
          ? `${result.rows} baris iklan diperbarui; sebagian data ditolak Shopee (${result.errors?.[0] || result.error || "periksa Aktivitas Sistem"}).`
          : result?.errors?.[0] || result?.error || "Sinkronisasi iklan belum berhasil.");
        window.localStorage.setItem(key, String(Date.now() - REFRESH_INTERVAL_MS + 30 * 60 * 1000));
      } else {
        setStatus(result.rows ? `${result.rows} baris performa iklan Shopee diperbarui.` : "Belum ada performa iklan pada periode ini.");
      }
      if (result?.rows) router.refresh();
    }).catch(() => {
      if (cancelled) return;
      setStatus("Koneksi Shopee Ads belum berhasil; akan dicoba lagi.");
      window.localStorage.setItem(key, String(Date.now() - REFRESH_INTERVAL_MS + 10 * 60 * 1000));
    });

    return () => { cancelled = true; };
  }, [dateFrom, dateTo, router, shopId, userId]);

  return status ? <p aria-live="polite" className="rounded-xl border border-slate-200 bg-white px-4 py-2 text-xs font-medium text-slate-600">{status}</p> : null;
}
