-- =====================================================
-- SCHEMA BASE DE DONNÉES - CLASH ROYALE DISCORD BOT
-- =====================================================
-- Créé pour gérer les associations utilisateurs Discord <-> Clash Royale
-- et le suivi des trophées pour les félicitations automatiques

-- Suppression des tables existantes (si elles existent)
DROP TABLE IF EXISTS trophy_history;
DROP TABLE IF EXISTS user_profiles;
DROP TABLE IF EXISTS bot_settings;

-- =====================================================
-- TABLE: user_profiles
-- =====================================================
-- Stocke les associations entre utilisateurs Discord et profils Clash Royale
CREATE TABLE user_profiles (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    discord_id TEXT UNIQUE NOT NULL,              -- ID Discord de l'utilisateur
    clash_tag TEXT UNIQUE NOT NULL,               -- Tag Clash Royale (ex: #ABC123DEF)
    clash_name TEXT NOT NULL,                     -- Nom du joueur Clash Royale
    current_trophies INTEGER DEFAULT 0,           -- Trophées actuels
    highest_trophies INTEGER DEFAULT 0,           -- Record de trophées
    level INTEGER DEFAULT 1,                      -- Niveau du joueur
    clan_name TEXT,                              -- Nom du clan (si dans un clan)
    clan_tag TEXT,                               -- Tag du clan (si dans un clan)
    clan_role TEXT,                              -- Rôle dans le clan
    verified BOOLEAN DEFAULT FALSE,               -- Profil vérifié
    sync_date DATETIME DEFAULT CURRENT_TIMESTAMP, -- Date de synchronisation
    last_update DATETIME DEFAULT CURRENT_TIMESTAMP, -- Dernière mise à jour
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- =====================================================
-- TABLE: trophy_history
-- =====================================================
-- Historique des trophées pour détecter les gains et féliciter
CREATE TABLE trophy_history (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_profile_id INTEGER NOT NULL,            -- Référence vers user_profiles
    old_trophies INTEGER NOT NULL,               -- Ancien nombre de trophées
    new_trophies INTEGER NOT NULL,               -- Nouveau nombre de trophées
    trophy_gain INTEGER NOT NULL,                -- Gain de trophées
    milestone_reached INTEGER,                   -- Palier atteint (1000, 2000, etc.)
    congratulated BOOLEAN DEFAULT FALSE,         -- Si félicitations envoyées
    recorded_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    
    FOREIGN KEY (user_profile_id) REFERENCES user_profiles(id) ON DELETE CASCADE
);

-- =====================================================
-- TABLE: bot_settings
-- =====================================================
-- Paramètres et configuration du bot
CREATE TABLE bot_settings (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    setting_key TEXT UNIQUE NOT NULL,           -- Clé du paramètre
    setting_value TEXT NOT NULL,                -- Valeur du paramètre
    description TEXT,                           -- Description du paramètre
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- =====================================================
-- INDEX pour optimiser les performances
-- =====================================================
CREATE INDEX idx_user_profiles_discord_id ON user_profiles(discord_id);
CREATE INDEX idx_user_profiles_clash_tag ON user_profiles(clash_tag);
CREATE INDEX idx_trophy_history_user_profile ON trophy_history(user_profile_id);
CREATE INDEX idx_trophy_history_recorded_at ON trophy_history(recorded_at);
CREATE INDEX idx_trophy_history_milestone ON trophy_history(milestone_reached);
CREATE INDEX idx_bot_settings_key ON bot_settings(setting_key);

-- =====================================================
-- DONNÉES INITIALES
-- =====================================================
-- Paramètres par défaut du bot
INSERT INTO bot_settings (setting_key, setting_value, description) VALUES
('last_ranking_update', '0', 'Timestamp de la derniere mise a jour du classement'),
('total_users_synced', '0', 'Nombre total utilisateurs synchronises'),
('trophy_check_enabled', 'true', 'Active/desactive la verification des trophees'),
('ranking_update_enabled', 'true', 'Active/desactive les mises a jour du classement'),
('congratulations_enabled', 'true', 'Active/desactive les felicitations automatiques'),
('bot_version', '1.0.0', 'Version actuelle du bot'),
('maintenance_mode', 'false', 'Mode maintenance du bot');

-- =====================================================
-- VUES UTILES
-- =====================================================
-- Vue pour le classement des utilisateurs
CREATE VIEW ranking_view AS
SELECT 
    up.discord_id,
    up.clash_name,
    up.current_trophies,
    up.highest_trophies,
    up.level,
    up.clan_name,
    up.clan_role,
    ROW_NUMBER() OVER (ORDER BY up.current_trophies DESC) as rank_position
FROM user_profiles up
WHERE up.verified = TRUE
ORDER BY up.current_trophies DESC;

-- Vue pour les gains de trophées récents (24h)
CREATE VIEW recent_trophy_gains AS
SELECT 
    up.discord_id,
    up.clash_name,
    th.old_trophies,
    th.new_trophies,
    th.trophy_gain,
    th.milestone_reached,
    th.congratulated,
    th.recorded_at
FROM trophy_history th
JOIN user_profiles up ON th.user_profile_id = up.id
WHERE th.recorded_at >= datetime('now', '-1 day')
AND th.trophy_gain > 0
ORDER BY th.recorded_at DESC;

-- =====================================================
-- TRIGGERS
-- =====================================================
-- Trigger pour mettre à jour last_update automatiquement
CREATE TRIGGER update_user_profiles_timestamp 
    AFTER UPDATE ON user_profiles
    BEGIN
        UPDATE user_profiles 
        SET last_update = CURRENT_TIMESTAMP 
        WHERE id = NEW.id;
    END;

-- Trigger pour mettre à jour updated_at dans bot_settings
CREATE TRIGGER update_bot_settings_timestamp 
    AFTER UPDATE ON bot_settings
    BEGIN
        UPDATE bot_settings 
        SET updated_at = CURRENT_TIMESTAMP 
        WHERE id = NEW.id;
    END;

-- =====================================================
-- FONCTIONS UTILES (commentées pour référence)
-- =====================================================
/*
-- Exemple de requête pour obtenir le top 10
SELECT * FROM ranking_view LIMIT 10;

-- Exemple pour obtenir les utilisateurs ayant gagné plus de 1000 trophées
SELECT * FROM recent_trophy_gains WHERE trophy_gain >= 1000;

-- Exemple pour obtenir les statistiques d'un utilisateur
SELECT 
    up.*,
    COUNT(th.id) as total_records,
    SUM(CASE WHEN th.trophy_gain > 0 THEN th.trophy_gain ELSE 0 END) as total_gains,
    SUM(CASE WHEN th.trophy_gain < 0 THEN ABS(th.trophy_gain) ELSE 0 END) as total_losses
FROM user_profiles up
LEFT JOIN trophy_history th ON up.id = th.user_profile_id
WHERE up.discord_id = 'DISCORD_USER_ID'
GROUP BY up.id;
*/

-- =====================================================
-- VALIDATION DU SCHÉMA
-- =====================================================
-- Vérification que toutes les tables sont créées correctement
SELECT 
    name as table_name,
    type
FROM sqlite_master 
WHERE type IN ('table', 'view', 'index', 'trigger')
ORDER BY type, name;