import { supabase } from "@/integrations/supabase/client";
import type { Database } from "@/integrations/supabase/types";

export type CompanyStatus = Database["public"]["Enums"]["company_status"];

export type AccountType = {
  isAdmin: boolean;
  isProvider: boolean;
  companyStatus: CompanyStatus | null;
};

/** Reads the signed-in user's account type: Emma admin, service provider (with approval status), or customer. */
export async function resolveAccountType(userId: string): Promise<AccountType> {
  const [roleRes, memberRes] = await Promise.all([
    supabase.from("user_roles").select("role").eq("user_id", userId).eq("role", "admin").maybeSingle(),
    supabase.from("company_members").select("company_id").eq("user_id", userId).eq("active", true).limit(1),
  ]);
  const companyId = memberRes.data?.[0]?.company_id ?? null;
  let companyStatus: CompanyStatus | null = null;
  if (companyId) {
    const { data } = await supabase.from("companies").select("status").eq("id", companyId).maybeSingle();
    companyStatus = (data?.status as CompanyStatus | undefined) ?? null;
  }
  return { isAdmin: Boolean(roleRes.data), isProvider: Boolean(companyId), companyStatus };
}

/** Where a user belongs after signing in: Emma admin portal, provider portal, or customer portal. */
export async function resolvePortalHome(userId: string): Promise<"/admin" | "/provider" | "/dashboard"> {
  const account = await resolveAccountType(userId);
  if (account.isAdmin) return "/admin";
  if (account.isProvider) return "/provider";
  return "/dashboard";
}