<?php
require_once '../config.php';

// Vérification de l'authentification
requireLogin();

// Vérification des permissions
if (!hasPermission('admin')) {
    setAlert('danger', 'ليس لديك صلاحية للوصول إلى هذه الصفحة');
    header('Location: ' . SITE_URL . '/members/subscriptions.php');
    exit;
}

// Vérifier si un ID est fourni dans l'URL
if (isset($_GET['id']) && is_numeric($_GET['id'])) {
    $subscriptionId = (int)$_GET['id'];
    
    try {
        $db = getDbConnection();
        
        // Commencer une transaction
        $db->beginTransaction();
        
        // Récupérer l'ID du membre et vérifier que l'abonnement existe
        $query = "SELECT s.member_id, m.first_name, m.last_name 
                  FROM subscriptions s 
                  JOIN members m ON s.member_id = m.id 
                  WHERE s.id = ?";
        $stmt = $db->prepare($query);
        $stmt->execute([$subscriptionId]);
        $subscription = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if (!$subscription) {
            // Si l'abonnement n'existe pas, annuler la transaction
            $db->rollBack();
            setAlert('danger', 'الاشتراك غير موجود');
            header('Location: ' . SITE_URL . '/members/subscriptions.php');
            exit;
        }
        
        $memberId = $subscription['member_id'];
        
        // Supprimer l'abonnement
        $deleteQuery = "DELETE FROM subscriptions WHERE id = ?";
        $deleteStmt = $db->prepare($deleteQuery);
        $result = $deleteStmt->execute([$subscriptionId]);
        
        if ($result) {
            // Mettre à jour le statut du membre
            updateMemberStatus($db, $memberId);
            
            // Valider la transaction
            $db->commit();
            setAlert('success', 'تم حذف الاشتراك بنجاح');
        } else {
            // En cas d'erreur, annuler la transaction
            $db->rollBack();
            setAlert('danger', 'حدث خطأ أثناء حذف الاشتراك');
        }
        
    } catch (PDOException $e) {
        // En cas d'exception, annuler la transaction
        if (isset($db)) {
            $db->rollBack();
        }
        setAlert('danger', 'خطأ في قاعدة البيانات: ' . $e->getMessage());
    }
} else {
    setAlert('danger', 'معرف الاشتراك غير صالح');
}

// Rediriger vers la page des abonnements
header('Location: ' . SITE_URL . '/members/subscriptions.php');
exit;

/**
 * Met à jour le statut du membre en fonction de ses abonnements
 * 
 * @param PDO $db Connexion à la base de données
 * @param int $memberId ID du membre
 * @return bool
 */
function updateMemberStatus($db, $memberId) {
    try {
        // Vérifier si le membre a un abonnement actif
        $query = "SELECT COUNT(*) FROM subscriptions 
                  WHERE member_id = ? 
                  AND end_date >= date('now')";
        
        $stmt = $db->prepare($query);
        $stmt->execute([$memberId]);
        
        $hasActiveSubscription = ($stmt->fetchColumn() > 0);
        
        // Mettre à jour le statut du membre
        $status = $hasActiveSubscription ? 'active' : 'inactive';
        
        $updateQuery = "UPDATE members SET 
                        status = ? 
                        WHERE id = ?";
        
        $updateStmt = $db->prepare($updateQuery);
        
        return $updateStmt->execute([$status, $memberId]);
        
    } catch (PDOException $e) {
        error_log('Erreur lors de la mise à jour du statut du membre: ' . $e->getMessage());
        return false;
    }
}
