-- ============================================================================
-- THE-PROGRAMMER - SCRIPT SQL COMPLET (52 PRODUITS)
-- Version IDEMPOTENTE - Peut etre execute plusieurs fois sans erreur
-- Faites une sauvegarde de votre base de donnees avant execution !
-- ============================================================================

DELIMITER //

-- ============================================================================
-- PROCEDURE POUR AJOUTER UNE COLONNE SI ELLE N'EXISTE PAS
-- ============================================================================
DROP PROCEDURE IF EXISTS AddColumnIfNotExists//
CREATE PROCEDURE AddColumnIfNotExists(
    IN tableName VARCHAR(64),
    IN columnName VARCHAR(64),
    IN columnDefinition VARCHAR(255)
)
BEGIN
    IF NOT EXISTS (
        SELECT * FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_SCHEMA = DATABASE()
        AND TABLE_NAME = tableName
        AND COLUMN_NAME = columnName
    ) THEN
        SET @sql = CONCAT('ALTER TABLE `', tableName, '` ADD COLUMN `', columnName, '` ', columnDefinition);
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END IF;
END//

-- ============================================================================
-- PROCEDURE POUR MODIFIER UNE COLONNE SI ELLE EXISTE
-- ============================================================================
DROP PROCEDURE IF EXISTS ModifyColumnIfExists//
CREATE PROCEDURE ModifyColumnIfExists(
    IN tableName VARCHAR(64),
    IN columnName VARCHAR(64),
    IN columnDefinition VARCHAR(255)
)
BEGIN
    IF EXISTS (
        SELECT * FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_SCHEMA = DATABASE()
        AND TABLE_NAME = tableName
        AND COLUMN_NAME = columnName
    ) THEN
        SET @sql = CONCAT('ALTER TABLE `', tableName, '` MODIFY COLUMN `', columnName, '` ', columnDefinition);
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END IF;
END//

DELIMITER ;

-- ============================================================================
-- MODIFICATIONS TABLE PLAYERS
-- ============================================================================

-- Advanced Phone
CALL AddColumnIfNotExists('players', 'phone_number', "VARCHAR(10) NOT NULL DEFAULT '0'");
CALL AddColumnIfNotExists('players', 'contact_list', 'TEXT NULL DEFAULT NULL');
CALL AddColumnIfNotExists('players', 'sms_value', "INT(10) NOT NULL DEFAULT '0'");
CALL AddColumnIfNotExists('players', 'call_value', "INT(10) NOT NULL DEFAULT '0'");

-- Annuaire
CALL AddColumnIfNotExists('players', 'annuaire', "ENUM('0','1') NOT NULL DEFAULT '0'");

-- DrivingQuestions
CALL AddColumnIfNotExists('players', 'driving_questions', 'TEXT NULL');

-- PermisPoints
CALL AddColumnIfNotExists('players', 'points_data', 'TEXT NULL');

-- Darknet
CALL AddColumnIfNotExists('players', 'darknet_name', 'VARCHAR(50) DEFAULT NULL');
CALL AddColumnIfNotExists('players', 'darknet_bitcoin', "VARCHAR(50) NOT NULL DEFAULT '0'");

-- ============================================================================
-- MODIFICATIONS TABLE VEHICLES
-- ============================================================================

-- CarPainter
CALL AddColumnIfNotExists('vehicles', 'custom_color', "VARCHAR(300) NOT NULL DEFAULT '-1'");
CALL AddColumnIfNotExists('vehicles', 'custom_rvmat', "VARCHAR(300) NOT NULL DEFAULT '-1'");
CALL ModifyColumnIfExists('vehicles', 'color', 'TEXT NOT NULL');

-- AdvancedHacking
CALL AddColumnIfNotExists('vehicles', 'security', 'VARCHAR(255) NULL');

-- Immatriculation
CALL AddColumnIfNotExists('vehicles', 'immatriculation', 'TEXT NOT NULL');

-- Advanced Insurance
CALL AddColumnIfNotExists('vehicles', 'insurance', "INT(1) NOT NULL DEFAULT '0'");
CALL AddColumnIfNotExists('vehicles', 'expiration_date', 'DATE NULL DEFAULT NULL');

-- ============================================================================
-- MODIFICATIONS TABLE HOUSES
-- ============================================================================

-- AdvancedHacking
CALL AddColumnIfNotExists('houses', 'security', 'VARCHAR(255) NULL');

-- ============================================================================
-- MODIFICATIONS TABLE CONTAINERS
-- ============================================================================

-- FurnitureSystem
CALL ModifyColumnIfExists('containers', 'classname', 'VARCHAR(80)');

-- ============================================================================
-- NOUVELLES TABLES - PHONE SYSTEM
-- ============================================================================

-- Advanced Phone - Messages History
CREATE TABLE IF NOT EXISTS `messages_history` (
    `id` INT(6) NOT NULL AUTO_INCREMENT,
    `pid` VARCHAR(64) NOT NULL,
    `number` VARCHAR(32) NOT NULL,
    `type` TEXT NOT NULL,
    `message` TEXT NOT NULL,
    `insert_time` TEXT NOT NULL,
    PRIMARY KEY (`id`)
) COLLATE='utf8_general_ci' ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

-- Advanced Phone - Calls History
CREATE TABLE IF NOT EXISTS `calls_history` (
    `id` INT(6) NOT NULL AUTO_INCREMENT,
    `pid` VARCHAR(64) NOT NULL,
    `number` VARCHAR(32) NOT NULL,
    `type` TEXT NOT NULL,
    `duration` INT(6) NOT NULL DEFAULT '0',
    `insert_time` TEXT NOT NULL,
    PRIMARY KEY (`id`)
) COLLATE='utf8_general_ci' ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

-- ============================================================================
-- NOUVELLES TABLES - IDENTITY SYSTEM
-- ============================================================================

-- AdvancedIdentity
CREATE TABLE IF NOT EXISTS `advanced_identity` (
    `id` INT(100) NOT NULL AUTO_INCREMENT,
    `pid` VARCHAR(64) NOT NULL,
    `name_player` VARCHAR(32) NOT NULL,
    `nom` VARCHAR(32) NOT NULL,
    `prenom` VARCHAR(32) NOT NULL,
    `naissance` TEXT NOT NULL,
    `lieu_naissance` TEXT NOT NULL,
    `nationalite` TEXT NOT NULL,
    `taille` INT(10) NOT NULL,
    `sexe` INT(1) NOT NULL,
    `insert_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) COLLATE='utf8_general_ci' ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

-- ============================================================================
-- NOUVELLES TABLES - BILLING SYSTEM
-- ============================================================================

-- Factures
CREATE TABLE IF NOT EXISTS `factures` (
    `id` INT(6) NOT NULL AUTO_INCREMENT,
    `from_pid` VARCHAR(17) NOT NULL,
    `to_pid` VARCHAR(17) NOT NULL,
    `to_name` VARCHAR(32) NOT NULL,
    `company` TEXT NOT NULL,
    `text` TEXT NOT NULL,
    `price` INT(100) NOT NULL DEFAULT '0',
    `payed` INT(10) NOT NULL DEFAULT '0',
    `insert_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `last_update` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) COLLATE='utf8mb4_general_ci' ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

-- ============================================================================
-- NOUVELLES TABLES - GROWING SYSTEM
-- ============================================================================

-- Plants
CREATE TABLE IF NOT EXISTS `plantes` (
    `id` INT(6) NOT NULL AUTO_INCREMENT,
    `classname` VARCHAR(32) NOT NULL,
    `position` TEXT NOT NULL,
    `created` TEXT NOT NULL,
    `last_watering` TEXT NOT NULL,
    PRIMARY KEY (`id`)
) COLLATE='utf8_general_ci' ENGINE=MyISAM;

-- ============================================================================
-- NOUVELLES TABLES - MONEY PRINTER
-- ============================================================================

-- MoneyPrinter
CREATE TABLE IF NOT EXISTS `printers` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `houseID` INT NOT NULL,
    `pid` VARCHAR(17) NOT NULL,
    `classname` VARCHAR(32) NOT NULL,
    `pos` VARCHAR(32) DEFAULT NULL,
    `dir` VARCHAR(128) DEFAULT NULL,
    `data` TEXT NOT NULL,
    `insert_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ============================================================================
-- NOUVELLES TABLES - DYNAMIC MARKET
-- ============================================================================

-- Dynamic Market (Bourse)
CREATE TABLE IF NOT EXISTS `bourse` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `itemName` TEXT NOT NULL,
    `price` INT(11) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ============================================================================
-- NOUVELLES TABLES - GOVERNMENT SYSTEM
-- ============================================================================

-- Gouvernement - Table principale
CREATE TABLE IF NOT EXISTS `gouvernement` (
    `id` INT(6) NOT NULL DEFAULT '1',
    `vote_proccessing` INT(1) NOT NULL DEFAULT '0',
    `candidats` TEXT NOT NULL,
    `voters` TEXT NOT NULL,
    `compte_gouv` INT(100) NOT NULL DEFAULT '0',
    `compte_cop` INT(100) NOT NULL DEFAULT '0',
    `compte_med` INT(100) NOT NULL DEFAULT '0',
    `compte_adac` INT(100) NOT NULL DEFAULT '0',
    `gouverneur` TEXT NOT NULL,
    `ministres` TEXT NOT NULL,
    `security` TEXT NOT NULL,
    `taxes` TEXT NOT NULL,
    PRIMARY KEY (`id`)
) COLLATE='latin1_swedish_ci' ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

-- Gouvernement - Logs
CREATE TABLE IF NOT EXISTS `gouvernement_logs` (
    `id` INT(6) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(32) NOT NULL,
    `value` INT(6) NOT NULL DEFAULT '0',
    `from_id` INT(1) NOT NULL,
    `to_id` INT(1) NOT NULL,
    `type` INT(1) NOT NULL,
    `insert_time` TEXT NOT NULL,
    PRIMARY KEY (`id`)
) COLLATE='utf8_general_ci' ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

-- Gouvernement - Lois
CREATE TABLE IF NOT EXISTS `gouvernement_laws` (
    `id` INT(6) NOT NULL AUTO_INCREMENT,
    `number` TEXT NOT NULL,
    `content` TEXT NOT NULL,
    `insert_time` TEXT NOT NULL,
    PRIMARY KEY (`id`)
) COLLATE='utf8_general_ci' ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

-- ============================================================================
-- NOUVELLES TABLES - INTERPOL
-- ============================================================================

-- Interpol - Fiches
CREATE TABLE IF NOT EXISTS `interpol` (
    `id` INT(6) NOT NULL AUTO_INCREMENT,
    `prenom` VARCHAR(32) NOT NULL,
    `nom` VARCHAR(32) NOT NULL,
    `naissance` TEXT NOT NULL,
    `adresse` TEXT NOT NULL,
    `ville` TEXT NOT NULL,
    `numero` VARCHAR(32) NOT NULL DEFAULT '0',
    `yeux` TEXT NOT NULL,
    `details` TEXT NOT NULL,
    `insert_time` TEXT NOT NULL,
    PRIMARY KEY (`id`)
) COLLATE='utf8mb4_general_ci' ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

-- Interpol - Crimes
CREATE TABLE IF NOT EXISTS `interpol_crimes` (
    `id` INT(6) NOT NULL AUTO_INCREMENT,
    `interpol_id` INT(6) NOT NULL,
    `crime` VARCHAR(64) NOT NULL,
    `price` INT(100) NOT NULL,
    `payed` TINYINT(1) NOT NULL DEFAULT '0',
    `insert_time` TEXT NOT NULL,
    PRIMARY KEY (`id`)
) COLLATE='utf8mb4_general_ci' ENGINE=InnoDB;

-- ============================================================================
-- NOUVELLES TABLES - PERMIS POINTS
-- ============================================================================

-- PermisPoints
CREATE TABLE IF NOT EXISTS `permis` (
    `id` INT(8) NOT NULL AUTO_INCREMENT,
    `pid` VARCHAR(17) NOT NULL DEFAULT '0',
    `permis_type` VARCHAR(255) NOT NULL DEFAULT '0',
    `reason` VARCHAR(255) NOT NULL DEFAULT '0',
    `insert_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) COLLATE='latin1_swedish_ci' ENGINE=InnoDB;

-- ============================================================================
-- NOUVELLES TABLES - PETDOG
-- ============================================================================

-- PetDog
CREATE TABLE IF NOT EXISTS `petdog` (
    `id` INT(6) NOT NULL AUTO_INCREMENT,
    `pid` VARCHAR(17) NOT NULL,
    `configName` VARCHAR(17) NOT NULL,
    `name` VARCHAR(32) NOT NULL,
    `alive` INT(6) NOT NULL DEFAULT '1',
    `side` VARCHAR(32) NOT NULL,
    PRIMARY KEY (`id`)
) COLLATE='utf8mb4_general_ci' ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

-- ============================================================================
-- NOUVELLES TABLES - DARKNET
-- ============================================================================

-- Darknet - Items
CREATE TABLE IF NOT EXISTS `darknet_items` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `owner_id` INT(11) NOT NULL,
    `type` INT(11) NOT NULL,
    `classname` VARCHAR(100) NOT NULL,
    `number` INT(11) NOT NULL,
    `price` VARCHAR(50) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- Darknet - Tchat
CREATE TABLE IF NOT EXISTS `darknet_tchat` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `text` TEXT NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- Darknet - Transferts
CREATE TABLE IF NOT EXISTS `darknet_transferts` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `owner_id` INT(11) NOT NULL,
    `text` VARCHAR(255) NOT NULL,
    `insert_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ============================================================================
-- NOUVELLES TABLES - ENTREPRISES
-- ============================================================================

-- Entreprise System
CREATE TABLE IF NOT EXISTS `entreprises` (
    `id` INT(6) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(64) NOT NULL,
    `owner_pid` VARCHAR(17) NOT NULL,
    `owner_name` VARCHAR(32) NOT NULL,
    `members` TEXT NOT NULL,
    `balance` INT(100) NOT NULL DEFAULT '0',
    `logo` TEXT NULL,
    `insert_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) COLLATE='utf8mb4_general_ci' ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

-- ============================================================================
-- NOUVELLES TABLES - LOCKERS
-- ============================================================================

-- Lockers
CREATE TABLE IF NOT EXISTS `lockers` (
    `id` INT(6) NOT NULL AUTO_INCREMENT,
    `pid` VARCHAR(17) NOT NULL,
    `houseID` INT(6) NOT NULL,
    `inventory` TEXT NOT NULL,
    `insert_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) COLLATE='utf8mb4_general_ci' ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

-- ============================================================================
-- NOUVELLES TABLES - LABORATORY
-- ============================================================================

-- Laboratory
CREATE TABLE IF NOT EXISTS `laboratory` (
    `id` INT(6) NOT NULL AUTO_INCREMENT,
    `pid` VARCHAR(17) NOT NULL,
    `houseID` INT(6) NOT NULL,
    `classname` VARCHAR(32) NOT NULL,
    `pos` TEXT NOT NULL,
    `dir` TEXT NOT NULL,
    `data` TEXT NOT NULL,
    `insert_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) COLLATE='utf8mb4_general_ci' ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

-- ============================================================================
-- NOUVELLES TABLES - CONTRAVENTION
-- ============================================================================

-- Contraventions
CREATE TABLE IF NOT EXISTS `contraventions` (
    `id` INT(6) NOT NULL AUTO_INCREMENT,
    `pid` VARCHAR(17) NOT NULL,
    `player_name` VARCHAR(32) NOT NULL,
    `cop_name` VARCHAR(32) NOT NULL,
    `reason` TEXT NOT NULL,
    `price` INT(100) NOT NULL DEFAULT '0',
    `payed` INT(1) NOT NULL DEFAULT '0',
    `insert_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) COLLATE='utf8mb4_general_ci' ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

-- ============================================================================
-- NOUVELLES TABLES - JAIL SYSTEM
-- ============================================================================

-- Jail System
CREATE TABLE IF NOT EXISTS `jail_records` (
    `id` INT(6) NOT NULL AUTO_INCREMENT,
    `pid` VARCHAR(17) NOT NULL,
    `player_name` VARCHAR(32) NOT NULL,
    `cop_name` VARCHAR(32) NOT NULL,
    `reason` TEXT NOT NULL,
    `duration` INT(11) NOT NULL,
    `insert_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) COLLATE='utf8mb4_general_ci' ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

-- ============================================================================
-- NETTOYAGE - SUPPRESSION DES PROCEDURES TEMPORAIRES
-- ============================================================================

DROP PROCEDURE IF EXISTS AddColumnIfNotExists;
DROP PROCEDURE IF EXISTS ModifyColumnIfExists;

-- ============================================================================
-- FIN DU SCRIPT - 52 PRODUITS
-- Script idempotent : peut etre execute plusieurs fois sans erreur
-- ============================================================================
