-- =================================================================
-- SYSTÈME D'ABONNEMENT - Script complet pour phpMyAdmin
-- Exécutez ce script dans phpMyAdmin pour créer toutes les tables
-- =================================================================

-- 0. Ajouter la colonne stripe_customer_id à la table users (si elle n'existe pas)
-- Cette colonne est nécessaire pour stocker l'ID client Stripe de chaque utilisateur
ALTER TABLE `users` ADD COLUMN IF NOT EXISTS `stripe_customer_id` VARCHAR(255) NULL;

-- 1. Table des plans d'abonnement
CREATE TABLE IF NOT EXISTS `subscription_plans` (
    `id` bigint unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(255) NOT NULL COMMENT 'Nom du plan (ex: Basic, Pro, Premium)',
    `description` text COMMENT 'Description du plan',
    `price` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT 'Prix du plan',
    `currency` varchar(3) NOT NULL DEFAULT 'EUR' COMMENT 'Devise (EUR, USD)',
    `billing_cycle` enum('weekly','monthly','quarterly','yearly') NOT NULL DEFAULT 'monthly' COMMENT 'Cycle de facturation',
    `features` json DEFAULT NULL COMMENT 'Liste des fonctionnalités en JSON',
    `booking_limit` int DEFAULT NULL COMMENT 'Limite de réservations (NULL = illimité)',
    `is_active` tinyint(1) NOT NULL DEFAULT 1 COMMENT '1 = actif, 0 = inactif',
    `is_featured` tinyint(1) NOT NULL DEFAULT 0 COMMENT '1 = plan mis en avant',
    `sort_order` int NOT NULL DEFAULT 0 COMMENT 'Ordre d affichage',
    `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 2. Table des abonnements utilisateurs
CREATE TABLE IF NOT EXISTS `user_subscriptions` (
    `id` bigint unsigned NOT NULL AUTO_INCREMENT,
    `user_id` bigint unsigned NOT NULL COMMENT 'ID du prestataire',
    `plan_id` bigint unsigned DEFAULT NULL COMMENT 'ID du plan',
    `status` enum('active','cancelled','expired','pending','trial') NOT NULL DEFAULT 'pending',
    `current_amount` decimal(10,2) DEFAULT NULL COMMENT 'Montant payé',
    `currency` varchar(3) NOT NULL DEFAULT 'EUR',
    `current_period_start` datetime DEFAULT NULL COMMENT 'Début de la période',
    `current_period_end` datetime DEFAULT NULL COMMENT 'Fin de la période',
    `trial_ends_at` datetime DEFAULT NULL COMMENT 'Fin de la période d essai',
    `cancelled_at` datetime DEFAULT NULL COMMENT 'Date d annulation',
    `cancellation_reason` text COMMENT 'Raison de l annulation',
    `stripe_subscription_id` varchar(255) DEFAULT NULL COMMENT 'ID Stripe si paiement en ligne',
    `payment_method` varchar(50) DEFAULT 'stripe' COMMENT 'Méthode de paiement',
    `auto_renew` tinyint(1) NOT NULL DEFAULT 1 COMMENT '1 = renouvellement auto',
    `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `user_subscriptions_user_id_idx` (`user_id`),
    KEY `user_subscriptions_plan_id_idx` (`plan_id`),
    KEY `user_subscriptions_status_idx` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 3. Table des paiements d'abonnement
CREATE TABLE IF NOT EXISTS `subscription_payments` (
    `id` bigint unsigned NOT NULL AUTO_INCREMENT,
    `subscription_id` bigint unsigned NOT NULL,
    `user_id` bigint unsigned NOT NULL,
    `amount` decimal(10,2) NOT NULL,
    `currency` varchar(3) NOT NULL DEFAULT 'EUR',
    `status` enum('pending','completed','failed','refunded') NOT NULL DEFAULT 'pending',
    `payment_method` varchar(50) DEFAULT NULL,
    `transaction_id` varchar(255) DEFAULT NULL,
    `stripe_payment_intent_id` varchar(255) DEFAULT NULL,
    `paid_at` datetime DEFAULT NULL,
    `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `subscription_payments_subscription_id_idx` (`subscription_id`),
    KEY `subscription_payments_user_id_idx` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 5. Plans par défaut (exemples)
INSERT INTO `subscription_plans` (`name`, `description`, `price`, `currency`, `billing_cycle`, `features`, `booking_limit`, `is_active`, `is_featured`, `sort_order`) VALUES
('Hebdomadaire', 'Accès complet pendant 1 semaine. Idéal pour tester.', 9.99, 'EUR', 'weekly', '["Profil visible", "10 réservations max", "Support email"]', 10, 1, 0, 1),
('Mensuel', 'Le plus populaire ! Accès complet pendant 1 mois.', 29.99, 'EUR', 'monthly', '["Profil visible", "Réservations illimitées", "Badge vérifié", "Support prioritaire"]', NULL, 1, 1, 2),
('Trimestriel', 'Économisez 15% avec l abonnement trimestriel.', 74.99, 'EUR', 'quarterly', '["Profil visible", "Réservations illimitées", "Badge vérifié", "Support prioritaire", "Statistiques avancées"]', NULL, 1, 0, 3),
('Annuel', 'La meilleure offre ! Économisez 30% sur l année.', 249.99, 'EUR', 'yearly', '["Profil visible", "Réservations illimitées", "Badge vérifié", "Support VIP 24/7", "Statistiques avancées", "Position prioritaire"]', NULL, 1, 0, 4)
ON DUPLICATE KEY UPDATE `updated_at` = NOW();

-- =================================================================
-- FIN DU SCRIPT
-- Le système d'abonnement est maintenant prêt !
-- Allez dans Admin > Configuration > Abonnements Presta pour gérer
-- =================================================================
