import { syncFedcmSession } from '@/lib/api';

type FedcmLoginNavigator = Navigator & {
  login?: {
    setStatus: (status: 'logged-in' | 'logged-out') => void;
  };
};

type FedcmIdentityProviderGlobal = {
  close?: () => void;
};

declare global {
  interface Window {
    IdentityProvider?: FedcmIdentityProviderGlobal;
  }
}

/** Завершение входа в popup FedCM: cookie + Set-Login для браузера. */
export async function finalizeFedcmLogin(accessToken: string) {
  if (typeof window === 'undefined' || !accessToken) {
    return;
  }

  await syncFedcmSession(accessToken);

  const loginApi = (navigator as FedcmLoginNavigator).login;
  if (loginApi?.setStatus) {
    try {
      loginApi.setStatus('logged-in');
    } catch {
      // FedCM API может быть недоступен вне popup-контекста
    }
  }

  if (window.IdentityProvider?.close) {
    try {
      window.IdentityProvider.close();
    } catch {
      // закрытие необязательно — браузер сам закроет popup после setStatus
    }
  }
}

export function shouldFinalizeFedcmLogin(pathname: string) {
  return pathname.startsWith('/auth/login');
}

export function isFedcmLoginPopup() {
  if (typeof window === 'undefined') return false;
  if (window.opener) return true;
  if (window.IdentityProvider?.close) return true;
  const params = new URLSearchParams(window.location.search);
  return params.get('fedcm') === '1';
}
