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

declare global {
  interface Window {
    AppleID: any;
  }
}

const loadSdk = () =>
  new Promise<void>((resolve) => {
    if (window.AppleID) {
      resolve();
      return;
    }
    const script = document.createElement('script');
    script.src = 'https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js';
    script.onload = () => resolve();
    script.async = true;
    document.body.appendChild(script);
  });

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

  await loadSdk();
  const clientId = config.key;
  const redirectURI = window.location.origin + '/apps/auth/callback?shop=${window.location.origin}&platform=google';
  console.log('Appleログイン - リダイレクトURL:', redirectURI);
  
  if (typeof redirectURI !== 'string' || redirectURI.trim() === '') {
    throw new Error(
      'Apple redirect URI is not configured. Set VITE_APPLE_REDIRECT_URI in your environment.',
    );
  }
  window.AppleID.auth.init({
    clientId,
    scope: 'name email',
    redirectURI,
    usePopup: true
  });
  const response = await window.AppleID.auth.signIn();
  const token = response?.authorization?.id_token ?? '';
  const user = response?.user ?? {};
  const payload = token ? JSON.parse(atob(token.split('.')[1])) : {};
  const name = user.name ? `${user.name.firstName ?? ''} ${user.name.lastName ?? ''}`.trim() : '';
  const email = user.email ?? payload.email ?? '';
  return {
    name,
    email,
    birthday: '',
    profileImage: '',
    platform: 'apple'
  };
};

export default appleLogin;
