-- ============================================================================
-- V2: Ajout des colonnes BaseEntity manquantes
-- ============================================================================
-- Auteur: Lions Dev
-- Date: 2026-03-16
-- Description: Ajoute les colonnes cree_par et modifie_par dans toutes les
--              tables qui ne les ont pas encore.
--              Ces colonnes font partie de BaseEntity et sont requises par
--              Hibernate pour le bon fonctionnement de l'audit.
-- ============================================================================

-- Pattern: Pour chaque table sans cree_par/modifie_par, ajouter:
-- ALTER TABLE nom_table ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
-- ALTER TABLE nom_table ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

-- Tables de base
ALTER TABLE adresses ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE adresses ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE ayants_droit ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE ayants_droit ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE agrements_professionnels ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE agrements_professionnels ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE alert_configuration ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE alert_configuration ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE alertes_lcb_ft ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE alertes_lcb_ft ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE approver_actions ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE approver_actions ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE budget_lines ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE budget_lines ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE budgets ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE budgets ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE campagnes_agricoles ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE campagnes_agricoles ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE campagnes_collecte ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE campagnes_collecte ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE campagnes_vote ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE campagnes_vote ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE candidats ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE candidats ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE comptes_comptables ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE comptes_comptables ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE comptes_epargne ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE comptes_epargne ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE comptes_wave ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE comptes_wave ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE configurations ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE configurations ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE configurations_wave ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE configurations_wave ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE contributions_collecte ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE contributions_collecte ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE cotisations ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE cotisations ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE demandes_adhesion ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE demandes_adhesion ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE demandes_aide ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE demandes_aide ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE demandes_credit ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE demandes_credit ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE documents ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE documents ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE dons_religieux ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE dons_religieux ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE echeances_credit ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE echeances_credit ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE echelons_organigramme ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE echelons_organigramme ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE ecritures_comptables ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE ecritures_comptables ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE evenements ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE evenements ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE favoris ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE favoris ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

DO $$ BEGIN
    IF EXISTS (SELECT FROM pg_tables WHERE schemaname = 'public' AND tablename = 'formules_abonnement') THEN
        ALTER TABLE formules_abonnement ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
        ALTER TABLE formules_abonnement ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);
    END IF;
END $$;

ALTER TABLE garanties_demande ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE garanties_demande ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE inscriptions_evenement ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE inscriptions_evenement ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE intentions_paiement ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE intentions_paiement ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE journaux_comptables ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE journaux_comptables ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE lignes_ecriture ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE lignes_ecriture ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE membres_organisations ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE membres_organisations ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE membre_suivi ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE membre_suivi ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE modules_disponibles ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE modules_disponibles ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE modules_organisation_actifs ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE modules_organisation_actifs ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE notifications ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE notifications ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE paiements ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE paiements ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE paiements_objets ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE paiements_objets ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE parametres_cotisation_organisation ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE parametres_cotisation_organisation ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE parametres_lcb_ft ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE parametres_lcb_ft ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE permissions ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE permissions ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE pieces_jointes ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE pieces_jointes ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE projets_ong ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE projets_ong ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE roles_permissions ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE roles_permissions ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

DO $$ BEGIN
    IF EXISTS (SELECT FROM pg_tables WHERE schemaname = 'public' AND tablename = 'souscriptions_organisation') THEN
        ALTER TABLE souscriptions_organisation ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
        ALTER TABLE souscriptions_organisation ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);
    END IF;
END $$;

ALTER TABLE suggestions ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE suggestions ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE suggestion_votes ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE suggestion_votes ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE system_alerts ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE system_alerts ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE system_logs ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE system_logs ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE templates_notifications ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE templates_notifications ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE tickets ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE tickets ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE tontines ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE tontines ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE tours_tontine ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE tours_tontine ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE transaction_approvals ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE transaction_approvals ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE transactions_wave ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE transactions_wave ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE transactions_epargne ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE transactions_epargne ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE types_reference ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE types_reference ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE validation_etapes_demande ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE validation_etapes_demande ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE webhooks_wave ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE webhooks_wave ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

ALTER TABLE workflow_validation_config ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE workflow_validation_config ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

-- Message de confirmation
DO $$
BEGIN
    RAISE NOTICE '✅ Colonnes BaseEntity ajoutées à toutes les tables';
END $$;
