--
-- Set character set the client will use to send SQL statements to the server
--
SET NAMES 'utf8';

--
-- Set default database
--
USE appros;

--
-- Create table `sys_demande_sge` - Table de gestion des demandes SGE automatisées
--
CREATE TABLE IF NOT EXISTS sys_demande_sge (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  type_action VARCHAR(50) NOT NULL COMMENT 'Type d''action (LANCER_REQUETE, LISTER_PRM, etc.)',
  params JSON DEFAULT NULL COMMENT 'Paramètres de la demande (PRM, dates, type_requete, etc.)',
  statut VARCHAR(20) DEFAULT 'EN_ATTENTE' COMMENT 'EN_ATTENTE, EN_COURS, TERMINE, ERREUR',
  resultat JSON DEFAULT NULL COMMENT 'Résultat détaillé du traitement ou message d''erreur',
  date_creation DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 'Date de création de la demande',
  date_debut_traitement DATETIME DEFAULT NULL COMMENT 'Date de début du traitement',
  date_fin_traitement DATETIME DEFAULT NULL COMMENT 'Date de fin du traitement',
  utilisateur VARCHAR(100) DEFAULT NULL COMMENT 'Utilisateur ayant créé la demande',
  commentaire TEXT DEFAULT NULL COMMENT 'Commentaire ou description de la demande',
  PRIMARY KEY (id),
  INDEX idx_statut (statut),
  INDEX idx_type_action (type_action),
  INDEX idx_date_creation (date_creation)
)
ENGINE = INNODB,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Table de gestion des demandes vers les services SGE ENEDIS';

--
-- Create table `sys_demande_ref` - Table de référence des types d'actions
--
CREATE TABLE IF NOT EXISTS sys_demande_ref (
  code_action VARCHAR(50) NOT NULL PRIMARY KEY COMMENT 'Code utilisé dans sys_demande_sge.type_action',
  libelle_action VARCHAR(255) NOT NULL COMMENT 'Description lisible de l''action',
  description TEXT DEFAULT NULL COMMENT 'Détail technique ou fonctionnel de l''action'
)
ENGINE = INNODB,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Table de référence des actions disponibles pour sys_demande_sge';

--
-- Insert reference data
--
INSERT INTO sys_demande_ref (code_action, libelle_action, description) VALUES
('LANCER_REQUETE', 'Lancer une requête ENEDIS', 'Déclenche une demande vers ENEDIS pour un ou plusieurs PRM (C68, R63, R64, R67)'),
('LISTER_PRM', 'Lister les PRM', 'Retourne la liste des Points de Référence Mesure gérés'),
('DETAILS_PRM', 'Détails d''un PRM', 'Retourne les informations techniques et l''historique d''un PRM'),
('CONSULTER_RESULTAT', 'Consulter le résultat', 'Récupère les données reçues pour une requête précédente'),
('AJOUT_PRM', 'Ajouter un PRM', 'Ajoute un nouveau PRM dans la base de données'),
('SUPPR_PRM', 'Supprimer un PRM', 'Désactive ou supprime un PRM de la gestion'),
('STATISTIQUES', 'Obtenir des statistiques', 'Retourne des statistiques sur les PRM et les requêtes'),
('HEALTHCHECK', 'Vérifier le statut', 'Test de fonctionnement du service backend'),
('LOGS', 'Obtenir les logs', 'Retourne l''historique des traitements et des erreurs')
ON DUPLICATE KEY UPDATE 
  libelle_action = VALUES(libelle_action),
  description = VALUES(description);

--
-- Add foreign key constraint (optional, for data integrity)
--
ALTER TABLE sys_demande_sge
ADD CONSTRAINT fk_sys_demande_type_action 
FOREIGN KEY (type_action) 
REFERENCES sys_demande_ref(code_action)
ON UPDATE CASCADE
ON DELETE RESTRICT;