-- Migration pour ajouter les colonnes manquantes à salary_transfers
-- Date: 2025-01-14

-- 1. Ajouter la colonne salaires_payes si elle n'existe pas
DO $$ 
BEGIN
    IF NOT EXISTS (
        SELECT 1 FROM information_schema.columns 
        WHERE table_name = 'salary_transfers' 
        AND column_name = 'salaires_payes'
    ) THEN
        ALTER TABLE salary_transfers 
        ADD COLUMN salaires_payes BOOLEAN DEFAULT false;
        
        COMMENT ON COLUMN salary_transfers.salaires_payes IS 'Indique si les salaires ont été payés aux salariés';
    END IF;
END $$;

-- 2. Vérifier que la colonne num_appel existe
DO $$ 
BEGIN
    IF NOT EXISTS (
        SELECT 1 FROM information_schema.columns 
        WHERE table_name = 'salary_transfers' 
        AND column_name = 'num_appel'
    ) THEN
        ALTER TABLE salary_transfers 
        ADD COLUMN num_appel TEXT;
        
        COMMENT ON COLUMN salary_transfers.num_appel IS 'Numéro d''appel de fonds (ex: 00001)';
    END IF;
END $$;

-- 3. Vérifier que la colonne callsheet_date existe (pour la génération PDF)
DO $$ 
BEGIN
    IF NOT EXISTS (
        SELECT 1 FROM information_schema.columns 
        WHERE table_name = 'salary_transfers' 
        AND column_name = 'callsheet_date'
    ) THEN
        ALTER TABLE salary_transfers 
        ADD COLUMN callsheet_date TIMESTAMP WITH TIME ZONE;
        
        COMMENT ON COLUMN salary_transfers.callsheet_date IS 'Date de génération de la feuille d''appel';
    END IF;
END $$;

-- 4. Ajouter des commentaires pour clarifier la logique des colonnes existantes
COMMENT ON COLUMN salary_transfers.notification_sent IS 'Indique si la notification a été envoyée au client';
COMMENT ON COLUMN salary_transfers.notification_ok IS 'Indique si le paiement du client a été reçu (ancien: statut de notification)';
COMMENT ON COLUMN salary_transfers.client_wire_received_at IS 'Date de réception du virement client (optionnelle)';

-- 5. Créer un index sur salaires_payes pour améliorer les performances des filtres
CREATE INDEX IF NOT EXISTS idx_salary_transfers_salaires_payes 
ON salary_transfers(salaires_payes);

-- 6. Créer un index sur notification_ok pour les filtres
CREATE INDEX IF NOT EXISTS idx_salary_transfers_notification_ok 
ON salary_transfers(notification_ok);

-- 7. Mettre à jour les données existantes (optionnel)
-- Si vous voulez que tous les virements avec une date de réception aient notification_ok à true
UPDATE salary_transfers 
SET notification_ok = true 
WHERE client_wire_received_at IS NOT NULL 
AND notification_ok IS NULL;

-- Afficher un résumé
SELECT 
    COUNT(*) as total_transfers,
    COUNT(CASE WHEN notification_sent = true THEN 1 END) as notifications_sent,
    COUNT(CASE WHEN notification_ok = true THEN 1 END) as paiements_recus,
    COUNT(CASE WHEN salaires_payes = true THEN 1 END) as salaires_payes,
    COUNT(CASE WHEN client_wire_received_at IS NOT NULL THEN 1 END) as avec_date_reception
FROM salary_transfers;
