-- =============================================
-- GYM SAAS - MIGRATION: EMAIL OPTIONNEL
-- Version: 1.0.0
-- Date: 2026-07-01
-- Description: Rendre le champ email nullable pour permettre
--              la création de membres sans email
-- =============================================

-- 🔄 MIGRATION: Rendre email nullable dans la table users
-- Permet de créer des membres sans email (téléphone comme identifiant)

USE gym_saas;

-- 1. Supprimer la contrainte NOT NULL sur email
ALTER TABLE users MODIFY COLUMN email VARCHAR(150) NULL UNIQUE;

-- 2. S'assurer que telephone est bien UNIQUE et optimisé
-- Cette contrainte devrait déjà exister, mais on vérifie
ALTER TABLE users MODIFY COLUMN telephone VARCHAR(20) UNIQUE;

-- 3. Créer/optimiser les index pour la recherche par téléphone
-- (pour identification rapide lors de l'authentification)
CREATE INDEX idx_telephone ON users(telephone);

-- 4. Créer un index composite pour optimiser les recherches multicritères
CREATE INDEX idx_email_telephone ON users(email, telephone);

-- 5. Modifier les valeurs NULL existantes si nécessaire
-- Remplacer les emails vides par NULL pour plus de cohérence
UPDATE users
SET email = NULL
WHERE email = '' OR email = ' ';

-- ✅ VALIDATION DE LA MIGRATION
-- Vérifier que la modification a été appliquée correctement
SELECT
    COLUMN_NAME,
    IS_NULLABLE,
    COLUMN_DEFAULT,
    CHARACTER_MAXIMUM_LENGTH,
    COLUMN_KEY
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'gym_saas'
  AND TABLE_NAME = 'users'
  AND COLUMN_NAME = 'email';

-- Résultat attendu:
-- COLUMN_NAME: email
-- IS_NULLABLE: YES
-- COLUMN_DEFAULT: NULL
-- CHARACTER_MAXIMUM_LENGTH: 150
-- COLUMN_KEY: UNI

SELECT '✅ Migration EMAIL OPTIONNEL completed successfully!' AS Status;

-- =============================================
-- NOTES IMPORTANTES
-- =============================================
--
-- 1. L'authentification fonctionne déjà avec email OU téléphone
-- 2. Les membres sans email utiliseront leur téléphone pour se connecter
-- 3. L'unicité est maintenue: pas de duplicats d'emails quand présents
-- 4. Téléphone devient l'identifiant principal pour les membres sans email
-- 5. Les données existantes ne sont pas affectées
--
-- =============================================