/* eslint-disable @typescript-eslint/no-explicit-any */
import type { UserData } from '../App';
import { getPlatformConfig } from './config';

declare global {
  interface Window {
    FB: any;
    fbAsyncInit: () => void;
  }
}

const loadSdk = () =>
  new Promise<void>((resolve) => {
    if (window.FB) {
      resolve();
      return;
    }

    window.fbAsyncInit = function () {
      const config = getPlatformConfig('facebook');
      window.FB.init({
        appId: config.key,
        cookie: true,
        xfbml: false,
        version: 'v18.0'
      });
      resolve();
    };

    const script = document.createElement('script');
    script.src = 'https://connect.facebook.net/en_US/sdk.js';
    script.async = true;
    document.body.appendChild(script);
  });

export const facebookLogin = async (): Promise<UserData> => {
  const config = getPlatformConfig('facebook');
  if (!config.enabled || !config.key) {
    throw new Error('Facebook is not configured or disabled');
  }

  // FacebookのリダイレクトURLは設定で管理されるため、現在のドメインをログ出力
  const redirectUri = window.location.origin + '/apps/auth/callback?shop=${window.location.origin}&platform=google';
  console.log('Facebookログイン - リダイレクトURL:', redirectUri);

  await loadSdk();
  return new Promise((resolve, reject) => {
    window.FB.login(
      (response: any) => {
        if (response.authResponse) {
          window.FB.api(
            '/me',
            { fields: 'name,email,birthday,picture' },
            (userResponse: any) => {
              resolve({
                name: userResponse.name,
                email: userResponse.email ?? '',
                birthday: userResponse.birthday ?? '',
                profileImage: userResponse.picture?.data?.url ?? '',
                platform: 'facebook'
              });
            }
          );
        } else {
          reject(new Error('Facebook login failed'));
        }
      },
      { scope: 'public_profile,email,user_birthday' }
    );
  });
};

export default facebookLogin;
