-- ================================================================================================
-- Campus Safe API - Seed Minimal (Version Production-Ready)
-- ================================================================================================
-- Insère uniquement les données strictement nécessaires pour démarrer :
--   1. Les 3 rôles système
--   2. Un administrateur (admin@inphb.ci / Admin1234!)
--   3. Les données de référence (FAQ, contacts urgence)
--
-- Mot de passe admin : Admin1234!
-- Hash bcrypt généré avec cost=12 :
--   python -c "import bcrypt; print(bcrypt.hashpw(b'Admin1234!', bcrypt.gensalt(12)).decode())"
--
-- Run with: psql -h localhost -U postgres -d campus_safe -f scripts/02_seed_minimal.sql
-- ================================================================================================

BEGIN;

CREATE EXTENSION IF NOT EXISTS pgcrypto;

-- ================================================================
-- 1. RÔLES SYSTÈME
-- ================================================================
-- ADMIN_SYSTEME : accès complet
-- GESTIONNAIRE  : traitement des signalements
-- UTILISATEUR   : étudiant / personnel standard

INSERT INTO roles (id, nom, description, permissions, date_creation)
VALUES
  (
    '00000000-0000-0000-0000-000000000001',
    'ADMIN_SYSTEME',
    'Administrateur système - accès complet',
    '["user:create","user:read","user:update","user:delete",
       "report:read","report:update","report:delete",
       "settings:manage","role:manage","log:read","backup:manage"]',
    NOW()
  ),
  (
    '00000000-0000-0000-0000-000000000002',
    'GESTIONNAIRE',
    'Gestionnaire - traitement des signalements et support',
    '["report:read","report:update",
       "discussion:read","discussion:write",
       "note:create","calendar:manage","resource:manage"]',
    NOW()
  ),
  (
    '00000000-0000-0000-0000-000000000003',
    'UTILISATEUR',
    'Utilisateur standard - Étudiant ou Personnel',
    '["report:create","discussion:read","discussion:write",
       "post:read","post:create","event:read","resource:read"]',
    NOW()
  )
ON CONFLICT (nom) DO NOTHING;


-- ================================================================
-- 2. ADMINISTRATEUR PAR DÉFAUT
-- ================================================================
-- Email    : admin@inphb.ci
-- Password : Admin1234!   (à changer immédiatement en production)

INSERT INTO utilisateurs (
    id, email, mot_de_passe_hash,
    nom, prenom, type_utilisateur,
    bureau_genre_id, telephone,
    filiere, campus,
    est_actif, premiere_connexion,
    date_creation
)
VALUES (
    '00000000-0000-0000-0000-000000000101',
    'admin@inphb.ci',
    '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMqJqhcanFueq0IiDt6HnFIs6u', -- Admin1234!
    'Admin',
    'Système',
    'ADMIN_SYSTEME',
    'BGP-001',
    NULL,
    'Administration',
    'Campus Principal Yamoussoukro',
    TRUE,
    FALSE,   -- FALSE = pas besoin de changer son mot de passe au premier login
    NOW()
)
ON CONFLICT (email) DO NOTHING;


-- Préférences par défaut de l'admin
INSERT INTO preferences (
    id, utilisateur_id,
    notifications_activees, notifications_email, notifications_push,
    langue, theme,
    date_modification
)
VALUES (
    '00000000-0000-0000-0001-000000000101',
    '00000000-0000-0000-0000-000000000101',
    TRUE, TRUE, TRUE,
    'fr', 'dark',
    NOW()
)
ON CONFLICT (utilisateur_id) DO NOTHING;


-- ================================================================
-- 3. CONTACTS D'URGENCE (données de référence obligatoires)
-- ================================================================

INSERT INTO contacts_urgence (id, nom, telephone, email, description, categorie, est_actif, ordre)
VALUES
  (gen_random_uuid(), 'Urgence Sécurité INPHB',  '125', NULL,
   'Numéro d''urgence interne du campus (24/7)', 'SECURITE', TRUE, 1),
  (gen_random_uuid(), 'Centre d''écoute nationale', '143', NULL,
   'Numéro vert national d''écoute psychologique (gratuit)', 'PSYCHOLOGIE', TRUE, 2),
  (gen_random_uuid(), 'Police Nationale', '170', NULL,
   'Appel d''urgence national', 'POLICE', TRUE, 3),
  (gen_random_uuid(), 'SAMU / Pompiers', '180', NULL,
   'Urgences médicales', 'SANTE', TRUE, 4)
ON CONFLICT DO NOTHING;


-- ================================================================
-- 4. FAQ MINIMALE (quelques entrées utiles au démarrage)
-- ================================================================

INSERT INTO faq (id, question, reponse, categorie, ordre, est_publie)
VALUES
  (gen_random_uuid(),
   'Comment signaler un incident anonymement ?',
   'Cochez la case "Anonyme" lors de la soumission du formulaire. Vos données personnelles ne seront pas enregistrées.',
   'Signalement', 1, TRUE),
  (gen_random_uuid(),
   'Qui a accès à mon signalement ?',
   'Seuls les membres habilités du Bureau du Genre et les administrateurs peuvent voir les détails. Confidentialité garantie.',
   'Confidentialité', 2, TRUE),
  (gen_random_uuid(),
   'Que faire en cas d''urgence immédiate ?',
   'Contactez directement la sécurité du campus (125) ou les numéros d''urgence listés sur la page d''accueil.',
   'Urgence', 3, TRUE),
  (gen_random_uuid(),
   'Comment créer un compte sur l''application ?',
   'Téléchargez l''application MyCampus INPHB et inscrivez-vous avec votre adresse email institutionnelle (@inphb.ci).',
   'Compte', 4, TRUE)
ON CONFLICT DO NOTHING;


COMMIT;

SELECT 'Seed minimal terminé.' AS status,
       (SELECT COUNT(*) FROM utilisateurs)    AS nb_utilisateurs,
       (SELECT COUNT(*) FROM roles)           AS nb_roles,
       (SELECT COUNT(*) FROM contacts_urgence) AS nb_contacts,
       (SELECT COUNT(*) FROM faq)             AS nb_faq;
