-- 1️⃣ Créer la table d’audit
CREATE TABLE audit.acteur_concerne_audit_log (
                                                 audit_id SERIAL PRIMARY KEY,
                                                 acteur_concerne_id BIGINT,
                                                 action VARCHAR(10),
                                                 changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                                                 old_data JSONB,
                                                 new_data JSONB
);

-- 2️⃣ Créer la fonction d’audit
CREATE OR REPLACE FUNCTION audit.audit_acteur_concerne_changes()
RETURNS TRIGGER AS $$
BEGIN
    IF (TG_OP = 'UPDATE') THEN
        INSERT INTO audit.acteur_concerne_audit_log (acteur_concerne_id, action, old_data, new_data)
        VALUES (
            OLD.id,
            TG_OP,
            to_jsonb(OLD),
            to_jsonb(NEW)
        );
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
        INSERT INTO audit.acteur_concerne_audit_log (acteur_concerne_id, action, new_data)
        VALUES (
            NEW.id,
            TG_OP,
            to_jsonb(NEW)
        );
RETURN NEW;
ELSIF (TG_OP = 'DELETE') THEN
        INSERT INTO audit.acteur_concerne_audit_log (acteur_concerne_id, action, old_data)
        VALUES (
            OLD.id,
            TG_OP,
            to_jsonb(OLD)
        );
RETURN OLD;
END IF;
END;
$$ LANGUAGE plpgsql;

-- 3️⃣ Créer le trigger
CREATE TRIGGER trigger_audit_acteur_concerne
    AFTER INSERT OR UPDATE OR DELETE ON acteur_concerne
    FOR EACH ROW
    EXECUTE FUNCTION audit.audit_acteur_concerne_changes();


GRANT USAGE ON SCHEMA audit TO infocad_user;
GRANT INSERT, SELECT ON audit.acteur_concerne_audit_log TO infocad_user;