<?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;

// En production, ici nous devrions vérifier si l'application est déjà enregistrée sur cette instance
// Si ce n'est pas le cas, il faudrait l'enregistrer via l'API Misskey
// Pour cette version initiale, nous utilisons des valeurs simulées

// Générer l'URL d'autorisation
try {
    // REMARQUE: Pour une implémentation réelle, $config['client_id'] et $config['client_secret'] 
    // devraient être stockés par instance car chaque instance Misskey nécessite une application distincte
    
    // Générer un état aléatoire pour la sécurité
    $state = bin2hex(random_bytes(16));
    $_SESSION['oauth_state'] = $state;
    
    // Construire l'URL de callback (doit correspondre à celle configurée dans l'application Misskey)
    $callback_url = $config['app_url'] . '/callback.php';
    
    // Paramètres de la requête d'autorisation
    $params = [
        'client_id' => $config['client_id'] ?: 'DEMO_CLIENT_ID', // En production, utiliser une valeur réelle
        'response_type' => 'code',
        'redirect_uri' => $callback_url,
        'scope' => 'write:favorites',
        'state' => $state
    ];
    
    // Construire l'URL d'autorisation
    $auth_url = "https://{$instance}/oauth/authorize?" . http_build_query($params);
    
    // 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;
}