-- ============================================
-- PILATES PLATFORM - DATABASE SCHEMA
-- ============================================
-- Script per creare tutte le tabelle necessarie
-- Esegui questo script nel tuo database MySQL
-- ============================================

-- Crea il database (se non esiste)
CREATE DATABASE IF NOT EXISTS pilatesplatform CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE pilatesplatform;

-- ============================================
-- TABELLA UTENTI
-- ============================================
-- Memorizza tutti gli utenti registrati (studenti e amministratori)

CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(255) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL COMMENT 'Password hashata con bcrypt',
    first_name VARCHAR(100) NOT NULL COMMENT 'Nome',
    last_name VARCHAR(100) NOT NULL COMMENT 'Cognome',
    is_admin BOOLEAN DEFAULT FALSE COMMENT 'True se amministratore',
    is_active BOOLEAN DEFAULT TRUE COMMENT 'Permette di disabilitare account',
    profile_image VARCHAR(255) DEFAULT NULL COMMENT 'URL immagine profilo',
    phone VARCHAR(20) DEFAULT NULL COMMENT 'Numero telefono opzionale',
    created_at DATETIME NOT NULL COMMENT 'Data registrazione',
    updated_at DATETIME DEFAULT NULL COMMENT 'Data ultimo aggiornamento',
    last_login DATETIME DEFAULT NULL COMMENT 'Data ultimo accesso',
    deleted_at DATETIME DEFAULT NULL COMMENT 'Soft delete - se valorizzato, utente cancellato',
    
    INDEX idx_email (email),
    INDEX idx_is_admin (is_admin),
    INDEX idx_deleted_at (deleted_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Utenti della piattaforma';

-- ============================================
-- TABELLA LEZIONI
-- ============================================
-- Memorizza sia videolezioni che lezioni live

CREATE TABLE IF NOT EXISTS lessons (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL COMMENT 'Titolo della lezione',
    description TEXT NOT NULL COMMENT 'Descrizione dettagliata',
    type ENUM('video', 'live') NOT NULL COMMENT 'Tipo: video registrato o live',
    
    -- Informazioni video
    video_url VARCHAR(500) DEFAULT NULL COMMENT 'URL video (YouTube, Vimeo, S3, o percorso locale)',
    video_platform VARCHAR(50) DEFAULT 'local' COMMENT 'Piattaforma: local, youtube, vimeo, s3',
    thumbnail VARCHAR(500) DEFAULT NULL COMMENT 'URL immagine anteprima',
    duration INT DEFAULT NULL COMMENT 'Durata in minuti',
    
    -- Informazioni lezione live
    live_platform VARCHAR(100) DEFAULT NULL COMMENT 'Piattaforma streaming (Zoom, Google Meet, ecc.)',
    live_url VARCHAR(500) DEFAULT NULL COMMENT 'Link alla sessione live',
    live_date DATETIME DEFAULT NULL COMMENT 'Data e ora della lezione live',
    
    -- Classificazione
    level ENUM('principiante', 'intermedio', 'avanzato') NOT NULL COMMENT 'Livello difficoltà',
    category VARCHAR(100) DEFAULT NULL COMMENT 'Categoria (es: mat, reformer, stretching)',
    tags VARCHAR(255) DEFAULT NULL COMMENT 'Tag separati da virgola',
    
    -- Prezzo e disponibilità
    price DECIMAL(10, 2) NOT NULL DEFAULT 0.00 COMMENT 'Prezzo in euro',
    is_demo BOOLEAN DEFAULT FALSE COMMENT 'Se true, lezione gratuita',
    is_active BOOLEAN DEFAULT TRUE COMMENT 'Se false, lezione non visibile',
    
    -- Statistiche
    view_count INT DEFAULT 0 COMMENT 'Numero visualizzazioni',
    purchase_count INT DEFAULT 0 COMMENT 'Numero acquisti',
    
    -- Metadata
    created_by INT DEFAULT NULL COMMENT 'ID admin che ha creato',
    created_at DATETIME NOT NULL COMMENT 'Data creazione',
    updated_at DATETIME DEFAULT NULL COMMENT 'Data ultimo aggiornamento',
    deleted_at DATETIME DEFAULT NULL COMMENT 'Soft delete',
    
    INDEX idx_type (type),
    INDEX idx_is_demo (is_demo),
    INDEX idx_is_active (is_active),
    INDEX idx_level (level),
    INDEX idx_live_date (live_date),
    INDEX idx_deleted_at (deleted_at),
    
    FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Lezioni video e live';

-- ============================================
-- TABELLA ACQUISTI
-- ============================================
-- Traccia tutti gli acquisti effettuati dagli utenti

CREATE TABLE IF NOT EXISTS purchases (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL COMMENT 'Utente che ha acquistato',
    lesson_id INT NOT NULL COMMENT 'Lezione acquistata',
    
    -- Informazioni pagamento
    amount DECIMAL(10, 2) NOT NULL COMMENT 'Importo pagato',
    currency VARCHAR(3) DEFAULT 'EUR' COMMENT 'Valuta',
    payment_method VARCHAR(50) DEFAULT 'paypal' COMMENT 'Metodo pagamento',
    
    -- Dettagli transazione PayPal
    paypal_order_id VARCHAR(100) DEFAULT NULL COMMENT 'ID ordine PayPal',
    paypal_payer_id VARCHAR(100) DEFAULT NULL COMMENT 'ID pagatore PayPal',
    paypal_payment_id VARCHAR(100) DEFAULT NULL COMMENT 'ID pagamento PayPal',
    paypal_status VARCHAR(50) DEFAULT NULL COMMENT 'Status PayPal',
    
    -- Status acquisto
    status ENUM('pending', 'completed', 'failed', 'refunded') DEFAULT 'pending' COMMENT 'Stato acquisto',
    
    -- Timestamp
    purchased_at DATETIME DEFAULT NULL COMMENT 'Data completamento acquisto',
    created_at DATETIME NOT NULL COMMENT 'Data creazione record',
    
    INDEX idx_user_id (user_id),
    INDEX idx_lesson_id (lesson_id),
    INDEX idx_status (status),
    INDEX idx_purchased_at (purchased_at),
    
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (lesson_id) REFERENCES lessons(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Acquisti lezioni';

-- ============================================
-- TABELLA RECUPERO PASSWORD
-- ============================================
-- Gestisce i token per il reset della password

CREATE TABLE IF NOT EXISTS password_resets (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL COMMENT 'Utente che ha richiesto reset',
    token VARCHAR(255) NOT NULL UNIQUE COMMENT 'Token univoco per reset',
    expires_at DATETIME NOT NULL COMMENT 'Scadenza token',
    used_at DATETIME DEFAULT NULL COMMENT 'Quando il token è stato usato',
    created_at DATETIME NOT NULL COMMENT 'Data creazione richiesta',
    
    INDEX idx_token (token),
    INDEX idx_user_id (user_id),
    INDEX idx_expires_at (expires_at),
    
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Token reset password';

-- ============================================
-- TABELLA LOG ATTIVITÀ (opzionale ma utile)
-- ============================================
-- Traccia le azioni importanti per debug e sicurezza

CREATE TABLE IF NOT EXISTS activity_log (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT DEFAULT NULL COMMENT 'Utente che ha eseguito azione',
    action VARCHAR(100) NOT NULL COMMENT 'Tipo azione (login, purchase, etc.)',
    description TEXT DEFAULT NULL COMMENT 'Descrizione dettagliata',
    ip_address VARCHAR(45) DEFAULT NULL COMMENT 'IP utente (supporta IPv6)',
    user_agent TEXT DEFAULT NULL COMMENT 'Browser/dispositivo',
    created_at DATETIME NOT NULL COMMENT 'Quando è avvenuta',
    
    INDEX idx_user_id (user_id),
    INDEX idx_action (action),
    INDEX idx_created_at (created_at),
    
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Log attività utenti';

-- ============================================
-- DATI DI ESEMPIO
-- ============================================

-- Inserisci un utente amministratore di default
-- Email: admin@pilatesstudio.com
-- Password: admin123 (CAMBIALA SUBITO dopo il primo accesso!)
INSERT INTO users (email, password, first_name, last_name, is_admin, created_at) 
VALUES (
    'admin@pilatesstudio.com',
    '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', -- Hash di 'admin123'
    'Admin',
    'Pilates',
    TRUE,
    NOW()
);

-- Inserisci alcune lezioni demo di esempio
INSERT INTO lessons (title, description, type, video_url, video_platform, thumbnail, duration, level, category, price, is_demo, is_active, created_at) VALUES
(
    'Introduzione al Pilates - Esercizi Base',
    'Una lezione introduttiva perfetta per chi inizia. Imparerai i principi fondamentali del Pilates e gli esercizi base per sviluppare forza e flessibilità.',
    'video',
    NULL,
    'local',
    NULL,
    30,
    'principiante',
    'Mat Work',
    0.00,
    TRUE,
    TRUE,
    NOW()
),
(
    'Pilates Intermedio - Full Body Workout',
    'Sessione completa per lavorare su tutto il corpo. Include esercizi di tonificazione, equilibrio e controllo del core.',
    'video',
    NULL,
    'local',
    NULL,
    45,
    'intermedio',
    'Mat Work',
    9.99,
    FALSE,
    TRUE,
    NOW()
),
(
    'Stretching e Mobilità',
    'Lezione dedicata allo stretching profondo e al miglioramento della mobilità articolare. Perfetta per recupero e rilassamento.',
    'video',
    NULL,
    'local',
    NULL,
    25,
    'principiante',
    'Stretching',
    0.00,
    TRUE,
    TRUE,
    NOW()
);

-- ============================================
-- FINE SCRIPT
-- ============================================

-- Verifica che tutte le tabelle siano state create
SELECT 
    TABLE_NAME as 'Tabella', 
    TABLE_ROWS as 'Righe',
    CREATE_TIME as 'Creata il'
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'pilatesplatform'
ORDER BY TABLE_NAME;
