-- Migration: Ajouter colonne salaires_par_date pour la saisie par date/représentation/répétition
-- Date: 2025-10-29
-- Description: Permet aux clients de saisir des salaires différenciés par date/événement

-- Ajouter la colonne JSONB
ALTER TABLE cddu_contracts 
ADD COLUMN IF NOT EXISTS salaires_par_date JSONB;

-- Ajouter un commentaire explicatif
COMMENT ON COLUMN cddu_contracts.salaires_par_date IS 
'Structure JSONB pour les salaires détaillés par date/représentation/répétition. 
Format: {
  "mode": "par_date",
  "type_salaire": "Brut|Net avant PAS|Coût total employeur",
  "representations": [{
    "date": "2025-11-15",
    "date_display": "15/11",
    "items": [{"index": 1, "montant": 250.00}]
  }],
  "repetitions": [{
    "date": "2025-11-10", 
    "date_display": "10/11",
    "items": [{"index": 1, "montant": 150.00, "duree": 4}]
  }],
  "jours_travail": [{
    "date": "2025-11-05",
    "date_display": "05/11",
    "montant": 180.00,
    "heures": 8
  }],
  "total_calcule": 1130.00
}';

-- Créer un index GIN pour requêtes performantes sur le JSONB
CREATE INDEX IF NOT EXISTS idx_cddu_contracts_salaires_par_date 
ON cddu_contracts USING GIN (salaires_par_date);

-- Créer un index partiel pour les contrats utilisant le mode par_date
CREATE INDEX IF NOT EXISTS idx_cddu_contracts_salaires_par_date_mode
ON cddu_contracts ((salaires_par_date->>'mode'))
WHERE salaires_par_date IS NOT NULL;

-- Fonction helper pour valider la structure JSONB (optionnel, pour validation future)
CREATE OR REPLACE FUNCTION validate_salaires_par_date(data JSONB)
RETURNS BOOLEAN AS $$
BEGIN
  -- Vérifier que le mode existe
  IF data ? 'mode' THEN
    RETURN data->>'mode' IN ('global', 'par_date');
  END IF;
  RETURN TRUE; -- NULL est valide
END;
$$ LANGUAGE plpgsql IMMUTABLE;

COMMENT ON FUNCTION validate_salaires_par_date IS 
'Valide la structure du JSONB salaires_par_date';
