<?php
/**
 * FavMasToKey - Authentification OAuth avec Misskey
 */

// Définir la constante pour inclure les fichiers
define('FAVMASTOKEY', true);

// Inclure les fichiers requis
require_once 'includes/config.php';
require_once 'includes/functions.php';

// Vérifier si l'instance est fournie
if (!isset($_GET['instance']) || empty($_GET['instance'])) {
    $_SESSION['messages'][] = [
        'type' => 'danger',
        'text' => 'Aucune instance Misskey spécifiée.'
    ];
    header('Location: index.php');
    exit;
}

// Récupérer l'instance
$instance = trim($_GET['instance']);

// Supprimer le protocole et les slash de fin si présents
$instance = preg_replace('/^https?:\/\//', '', $instance);
$instance = rtrim($instance, '/');

// Vérifier que l'instance semble valide
if (!preg_match('/^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/', $instance)) {
    $_SESSION['messages'][] = [
        'type' => 'danger',
        'text' => 'L\'URL de l\'instance Misskey semble invalide.'
    ];
    header('Location: index.php');
    exit;
}

// Stocker l'instance dans la session
$_SESSION['misskey_instance'] = $instance;

// Vérifier si cette instance est déjà enregistrée
$client_id = null;
$client_secret = null;

if (isset($app_data['instances'][$instance])) {
    $client_id = $app_data['instances'][$instance]['client_id'];
    $client_secret = $app_data['instances'][$instance]['client_secret'];
} else {
    // L'application n'est pas encore enregistrée, on l'enregistre
    $registration = register_misskey_app($instance);
    
    if ($registration['success']) {
        // Enregistrement réussi, stocker les informations
        $client_id = $registration['client_id'];
        $client_secret = $registration['client_secret'];
        
        // Sauvegarder dans le fichier de données
        $app_data['instances'][$instance] = [
            'client_id' => $client_id,
            'client_secret' => $client_secret,
            'registered_at' => time()
        ];
        
        save_app_data();
    } else {
        // Échec de l'enregistrement
        $_SESSION['messages'][] = [
            'type' => 'danger',
            'text' => 'Erreur lors de l\'enregistrement de l\'application sur ' . $instance . ': ' . $registration['message']
        ];
        header('Location: index.php');
        exit;
    }
}

// Stocker le client_secret dans la session pour l'utiliser plus tard
$_SESSION['misskey_client_secret'] = $client_secret;

// Générer l'URL d'autorisation
try {
    // Générer l'URL avec le client_id obtenu
    $auth_url = generate_oauth_url($instance, $client_id);
    
    // Rediriger vers l'URL d'autorisation
    header('Location: ' . $auth_url);
    exit;
    
} catch (Exception $e) {
    $_SESSION['messages'][] = [
        'type' => 'danger',
        'text' => 'Erreur lors de la préparation de l\'authentification: ' . $e->getMessage()
    ];
    header('Location: index.php');
    exit;
}