-- ============================================================
-- VAELORIA — Schéma de base de données — Phase 1
-- ============================================================
-- À exécuter dans phpMyAdmin sur O2Switch
-- ============================================================


-- ------------------------------------------------------------
-- TABLE : players
-- Un compte joueur par personne
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `players` (
    `id`            INT UNSIGNED    NOT NULL AUTO_INCREMENT,
    `username`      VARCHAR(32)     NOT NULL,
    `email`         VARCHAR(255)    NOT NULL,
    `password_hash` VARCHAR(255)    NOT NULL,
    `created_at`    DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `last_login`    DATETIME                 DEFAULT NULL,
    `is_active`     TINYINT(1)      NOT NULL DEFAULT 1,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uq_username` (`username`),
    UNIQUE KEY `uq_email`    (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- ------------------------------------------------------------
-- TABLE : houses
-- La maison noble de chaque joueur (1 joueur = 1 maison)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `houses` (
    `id`            INT UNSIGNED    NOT NULL AUTO_INCREMENT,
    `player_id`     INT UNSIGNED    NOT NULL,
    `name`          VARCHAR(64)     NOT NULL,           -- "Maison Valcor"
    `color_primary` CHAR(7)         NOT NULL DEFAULT '#8B0000',  -- Couleur bannière
    `color_secondary` CHAR(7)       NOT NULL DEFAULT '#FFD700',  -- Couleur secondaire
    `motto`         VARCHAR(128)             DEFAULT NULL,       -- Devise optionnelle
    `created_at`    DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uq_player`    (`player_id`),
    UNIQUE KEY `uq_house_name`(`name`),
    CONSTRAINT `fk_house_player` FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- ------------------------------------------------------------
-- TABLE : islands
-- Toutes les îles de la carte monde (~3200 îles)
-- Générées une seule fois par le script MapGenerator
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `islands` (
    `id`            INT UNSIGNED    NOT NULL AUTO_INCREMENT,

    -- Position sur la carte (coordonnées pixel sur le canvas)
    `coord_x`       FLOAT           NOT NULL,
    `coord_y`       FLOAT           NOT NULL,

    -- Structure géographique
    `ring`          TINYINT         NOT NULL COMMENT '3=départ, 2=intermédiaire, 1=Vaeron',
    `zone`          ENUM('north','south','east','west','center') NOT NULL,
    `shape`         ENUM('circular','star','crescent','diamond','spiral','triskel') NOT NULL,

    -- Bonus de ressources naturelles de l'île
    `resource_bonus` ENUM('wood','stone','iron','silver','favor','none') NOT NULL DEFAULT 'none',

    -- Capacités
    `city_slots`    TINYINT         NOT NULL DEFAULT 20,  -- Emplacements joueurs
    `village_count` TINYINT         NOT NULL DEFAULT 6,   -- Villages neutres pillables (4-8)

    -- Vaeron uniquement
    `is_vaeron`     TINYINT(1)      NOT NULL DEFAULT 0,
    `vaeron_province` VARCHAR(64)            DEFAULT NULL, -- Ex: "Zorvan", "Nordia"...

    `created_at`    DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,

    PRIMARY KEY (`id`),
    KEY `idx_ring`  (`ring`),
    KEY `idx_zone`  (`zone`),
    KEY `idx_coords`(`coord_x`, `coord_y`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- ------------------------------------------------------------
-- TABLE : cities
-- Les villes des joueurs sur les îles
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `cities` (
    `id`            INT UNSIGNED    NOT NULL AUTO_INCREMENT,
    `player_id`     INT UNSIGNED             DEFAULT NULL,  -- NULL = ville vierge
    `island_id`     INT UNSIGNED    NOT NULL,
    `slot_number`   TINYINT         NOT NULL,               -- 1 à 20 sur l'île

    -- Infos de la ville
    `name`          VARCHAR(64)     NOT NULL DEFAULT 'Ville sans nom',
    `is_capital`    TINYINT(1)      NOT NULL DEFAULT 0,     -- 1ère ville du joueur = capitale

    -- Dieu vénéré dans cette ville (NULL = pas encore choisi)
    `god`           ENUM(
                        'kael','morthis','sylvara','ignareth','thalass',
                        'verath','vaela','aelion','nyxar','grundar',
                        'zephyros','draaveth'
                    )               DEFAULT NULL,

    -- Ressources actuelles (stockées en BDD, calculées à la demande)
    `wood`          INT UNSIGNED    NOT NULL DEFAULT 500,
    `stone`         INT UNSIGNED    NOT NULL DEFAULT 500,
    `silver`        INT UNSIGNED    NOT NULL DEFAULT 500,
    `iron`          INT UNSIGNED    NOT NULL DEFAULT 500,
    `favor`         INT UNSIGNED    NOT NULL DEFAULT 0,
    `population`    INT UNSIGNED    NOT NULL DEFAULT 200,

    -- Dernière mise à jour des ressources (pour calcul de production)
    `last_resource_update` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,

    `created_at`    DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `conquered_at`  DATETIME                 DEFAULT NULL,

    PRIMARY KEY (`id`),
    UNIQUE KEY `uq_island_slot` (`island_id`, `slot_number`),
    KEY `idx_player` (`player_id`),
    CONSTRAINT `fk_city_player` FOREIGN KEY (`player_id`)  REFERENCES `players`(`id`) ON DELETE SET NULL,
    CONSTRAINT `fk_city_island` FOREIGN KEY (`island_id`)  REFERENCES `islands`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;



-- ============================================================
-- FIN DU SCHÉMA — Phase 1
-- Les tables suivantes seront ajoutées dans les phases futures :
--   buildings, building_queues, units, unit_queues,
--   attacks, alliances, technologies, spells...
-- ============================================================
