"use client";

import { useEffect, useState } from "react";
import { BrandLoader } from "@/components/brand-loader";
import { useRouter } from "next/navigation";
import { CompanyProfileForm } from "@/app/dashboard/settings/company-profile-form";
import { getSupabaseClient } from "@/lib/supabase";
import { getCompanyContext, getEffectiveCompanyRole } from "@/lib/company-context";

type GuardState = "loading" | "ready" | "redirecting";

type ProfileRecord = {
  store_name?: unknown;
  cnpj?: unknown;
  phone?: unknown;
  address_zip?: unknown;
  address_street?: unknown;
  address_number?: unknown;
  address_neighborhood?: unknown;
  address_city?: unknown;
  address_state?: unknown;
} | null;

const DASHBOARD_CONFETTI_STORAGE_KEY = "ktl:onboarding-dashboard-confetti";

function isProfileComplete(profile: ProfileRecord) {
  const cleanCnpj =
    typeof profile?.cnpj === "string" ? String(profile.cnpj).replace(/\D/g, "") : "";

  return Boolean(
    String(profile?.store_name ?? "").trim() &&
      (cleanCnpj.length === 14 || cleanCnpj.length === 11) &&
      String(profile?.phone ?? "").trim() &&
      String(profile?.address_zip ?? "").trim() &&
      String(profile?.address_street ?? "").trim() &&
      String(profile?.address_number ?? "").trim() &&
      String(profile?.address_neighborhood ?? "").trim() &&
      String(profile?.address_city ?? "").trim() &&
      String(profile?.address_state ?? "").trim()
  );
}

export default function OnboardingPage() {
  const router = useRouter();
  const [guardState, setGuardState] = useState<GuardState>("loading");

  useEffect(() => {
    return () => {
    };
  }, []);

  useEffect(() => {
    let cancelled = false;

    async function checkOnboardingAccess() {
      try {
        const supabase = getSupabaseClient();
        const {
          data: { user },
        } = await supabase.auth.getUser();

        if (!user) {
          if (!cancelled) setGuardState("redirecting");
          router.replace("/");
          return;
        }

        const ctx = await getCompanyContext(supabase, user);
        const role = getEffectiveCompanyRole(ctx, user.id);

        if (role !== "owner") {
          if (!cancelled) setGuardState("redirecting");
          router.replace("/dashboard");
          return;
        }

        const { data } = await supabase
          .from("profiles")
          .select(
            "store_name, cnpj, phone, address_zip, address_street, address_number, address_neighborhood, address_city, address_state"
          )
          .eq("id", user.id)
          .maybeSingle();

        if (isProfileComplete((data ?? null) as ProfileRecord)) {
          if (!cancelled) setGuardState("redirecting");
          router.replace("/dashboard");
          return;
        }

        if (!cancelled) setGuardState("ready");
      } catch {
        if (!cancelled) setGuardState("redirecting");
        router.replace("/dashboard");
      }
    }

    void checkOnboardingAccess();
    return () => {
      cancelled = true;
    };
  }, [router]);

  if (guardState !== "ready") {
    return (
      <BrandLoader
        message={
          guardState === "redirecting" ? "Redirecionando…" : "Preparando sua configuração…"
        }
      />
    );
  }

  return (
    <CompanyProfileForm
      requireComplete
      compact
      variant="onboarding"
      submitLabel="Salvar e entrar"
      onSaved={() => {
        if (typeof window !== "undefined") {
          window.sessionStorage.setItem(DASHBOARD_CONFETTI_STORAGE_KEY, "1");
        }
        router.replace("/dashboard");
      }}
    />
  );
}
