import { GitHub } from "arctic";
import { ALLOWED_CALLBACK_HOSTS, FRONTEND_URL, OAUTH_CALLBACK_URL } from "@/utils/api-config";

// Helper-Funktion, um die passende Callback-URL zu bestimmen
const getCallbackUrl = () => {
  // Wenn eine spezifische OAuth-Callback-URL definiert ist, verwende diese
  if (process.env.NEXT_PUBLIC_OAUTH_CALLBACK_URL) {
    console.log("Verwende konfigurierte OAuth Callback URL:", process.env.NEXT_PUBLIC_OAUTH_CALLBACK_URL);
    return process.env.NEXT_PUBLIC_OAUTH_CALLBACK_URL;
  }
  
  // Für spezifischen Unternehmens-Hostname
  if (FRONTEND_URL.includes('corpintra.net') || FRONTEND_URL.includes('m040tbaraspi001')) {
    const url = `http://m040tbaraspi001.de040.corpintra.net/auth/login/callback`;
    console.log("Verwende Unternehmens-Hostname für OAuth Callback:", url);
    return url;
  }
  
  // Fallback für lokale Entwicklung
  console.log("Verwende Standard OAuth Callback URL:", OAUTH_CALLBACK_URL);
  return OAUTH_CALLBACK_URL;
};

// Berechne die Callback-URL
export const USED_CALLBACK_URL = getCallbackUrl();

// Hardcodierte GitHub OAuth-Credentials
const GITHUB_CLIENT_ID = "7c5d8bef1a5519ec1fdc";
const GITHUB_CLIENT_SECRET = "5f1e586204358fbd53cf5fb7d418b3f06ccab8fd";

// Erstelle GitHub OAuth-Client mit expliziter Redirect-URI
export const github = new GitHub(
  GITHUB_CLIENT_ID, 
  GITHUB_CLIENT_SECRET, 
  {
    enterpriseDomain: "https://git.i.mercedes-benz.com",
    redirectURI: USED_CALLBACK_URL,
  }
);

// Hilfsfunktion zur Validierung von OAuth-Callbacks
export function isValidCallbackHost(url: string): boolean {
  try {
    const parsedUrl = new URL(url);
    return ALLOWED_CALLBACK_HOSTS.some(host => parsedUrl.hostname === host || 
                                              parsedUrl.hostname.includes(host));
  } catch (e) {
    console.error("Ungültige URL beim Validieren des Callback-Hosts:", url, e);
    return false;
  }
}

export interface GitHubUserResult {
	id: number;
	login: string;
	name: string;
	email: string;
}
