<?php
/**
 * FavMasToKey - Callback OAuth pour 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'état est valide (protection CSRF)
if (!isset($_GET['state']) || !isset($_SESSION['oauth_state']) || $_GET['state'] !== $_SESSION['oauth_state']) {
    $_SESSION['messages'][] = [
        'type' => 'danger',
        'text' => 'Paramètre d\'état invalide. Veuillez réessayer.'
    ];
    header('Location: index.php');
    exit;
}

// Vérifier si le code d'autorisation est présent
if (!isset($_GET['code']) || empty($_GET['code'])) {
    $_SESSION['messages'][] = [
        'type' => 'danger',
        'text' => 'Aucun code d\'autorisation reçu. L\'authentification a échoué ou a été annulée.'
    ];
    header('Location: index.php');
    exit;
}

// Récupérer l'instance Misskey depuis la session
if (!isset($_SESSION['misskey_instance']) || empty($_SESSION['misskey_instance'])) {
    $_SESSION['messages'][] = [
        'type' => 'danger',
        'text' => 'Instance Misskey non définie. Veuillez recommencer.'
    ];
    header('Location: index.php');
    exit;
}

$instance = $_SESSION['misskey_instance'];
$code = $_GET['code'];

// En production, ici nous échangerions le code contre un token d'accès
// Pour cette version initiale, nous simulons l'échange

// Simulation : générer un token fictif
// Dans une implémentation réelle, nous appellerions l'API Misskey pour obtenir un vrai token
$_SESSION['misskey_token'] = 'DEMO_' . bin2hex(random_bytes(16));

// Dans un cas réel, nous aurions un code similaire à celui-ci:
/*
// Construire l'URL pour l'échange du code
$token_url = "https://{$instance}/oauth/token";

// Paramètres de la requête
$params = [
    'client_id' => $config['client_id'],
    'client_secret' => $config['client_secret'],
    'grant_type' => 'authorization_code',
    'code' => $code,
    'redirect_uri' => $config['app_url'] . '/callback.php'
];

// Initialiser cURL
$ch = curl_init();

// Configurer la requête
curl_setopt_array($ch, [
    CURLOPT_URL => $token_url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => http_build_query($params),
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/x-www-form-urlencoded'
    ],
    CURLOPT_TIMEOUT => 30,
    CURLOPT_SSL_VERIFYPEER => true
]);

// Exécuter la requête
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);

// Fermer la session cURL
curl_close($ch);

// Vérifier les erreurs
if ($error || $http_code !== 200) {
    $_SESSION['messages'][] = [
        'type' => 'danger',
        'text' => 'Erreur lors de l\'échange du code d\'autorisation: ' . ($error ?: 'HTTP ' . $http_code)
    ];
    header('Location: index.php');
    exit;
}

// Décoder la réponse
$response_data = json_decode($response, true);

// Vérifier que le token est présent
if (!isset($response_data['access_token']) || empty($response_data['access_token'])) {
    $_SESSION['messages'][] = [
        'type' => 'danger',
        'text' => 'Aucun token d\'accès reçu. L\'authentification a échoué.'
    ];
    header('Location: index.php');
    exit;
}

// Stocker le token dans la session
$_SESSION['misskey_token'] = $response_data['access_token'];
*/

// Nettoyer l'état OAuth
unset($_SESSION['oauth_state']);

// Ajouter un message de succès
$_SESSION['messages'][] = [
    'type' => 'success',
    'text' => 'Connecté avec succès à ' . $instance . '.'
];

// Rediriger vers la page de migration (étape 3)
header('Location: index.php#step3');