-- ============================================================================
-- V19 — Formules Option C : plan commercial + features + statuts org
-- Option C : prix = f(taille), modules = f(type org), features = f(plan)
-- ============================================================================

-- ============================================================================
-- 1. Ajouter les colonnes Option C sur formules_abonnement
-- ============================================================================

-- Nom commercial affiché à l'utilisateur (MICRO / DECOUVERTE / ESSENTIEL / AVANCE / PROFESSIONNEL / ENTERPRISE)
ALTER TABLE formules_abonnement ADD COLUMN IF NOT EXISTS plan_commercial VARCHAR(30);

-- Niveau de reporting inclus dans ce plan
ALTER TABLE formules_abonnement ADD COLUMN IF NOT EXISTS niveau_reporting VARCHAR(20) DEFAULT 'BASIQUE';

-- Accès API REST (pour intégrations externes)
ALTER TABLE formules_abonnement ADD COLUMN IF NOT EXISTS api_access BOOLEAN DEFAULT FALSE;

-- Accès module fédération (gestion multi-org hiérarchique)
ALTER TABLE formules_abonnement ADD COLUMN IF NOT EXISTS federation_access BOOLEAN DEFAULT FALSE;

-- Support prioritaire
ALTER TABLE formules_abonnement ADD COLUMN IF NOT EXISTS support_prioritaire BOOLEAN DEFAULT FALSE;

-- SLA garanti (ex: '99.5%', '99.9%')
ALTER TABLE formules_abonnement ADD COLUMN IF NOT EXISTS sla_garanti VARCHAR(10);

-- Nombre max d'administrateurs (NULL = illimité)
ALTER TABLE formules_abonnement ADD COLUMN IF NOT EXISTS max_admins INTEGER;

-- ============================================================================
-- 2. Mapper les 12 formules avec leur plan_commercial et features
-- ============================================================================

-- PETITE + BASIC → MICRO
UPDATE formules_abonnement SET
    plan_commercial   = 'MICRO',
    niveau_reporting  = 'BASIQUE',
    api_access        = FALSE,
    federation_access = FALSE,
    support_prioritaire = FALSE,
    sla_garanti       = '99.0%',
    max_admins        = 2
WHERE code = 'BASIC' AND plage = 'PETITE';

-- PETITE + STANDARD → DECOUVERTE
UPDATE formules_abonnement SET
    plan_commercial   = 'DECOUVERTE',
    niveau_reporting  = 'STANDARD',
    api_access        = FALSE,
    federation_access = FALSE,
    support_prioritaire = FALSE,
    sla_garanti       = '99.0%',
    max_admins        = 5
WHERE code = 'STANDARD' AND plage = 'PETITE';

-- PETITE + PREMIUM → ESSENTIEL
UPDATE formules_abonnement SET
    plan_commercial   = 'ESSENTIEL',
    niveau_reporting  = 'STANDARD',
    api_access        = TRUE,
    federation_access = FALSE,
    support_prioritaire = FALSE,
    sla_garanti       = '99.5%',
    max_admins        = 10
WHERE code = 'PREMIUM' AND plage = 'PETITE';

-- MOYENNE + BASIC → ESSENTIEL
UPDATE formules_abonnement SET
    plan_commercial   = 'ESSENTIEL',
    niveau_reporting  = 'STANDARD',
    api_access        = FALSE,
    federation_access = FALSE,
    support_prioritaire = FALSE,
    sla_garanti       = '99.5%',
    max_admins        = 5
WHERE code = 'BASIC' AND plage = 'MOYENNE';

-- MOYENNE + STANDARD → AVANCE
UPDATE formules_abonnement SET
    plan_commercial   = 'AVANCE',
    niveau_reporting  = 'AVANCE',
    api_access        = TRUE,
    federation_access = FALSE,
    support_prioritaire = FALSE,
    sla_garanti       = '99.5%',
    max_admins        = 15
WHERE code = 'STANDARD' AND plage = 'MOYENNE';

-- MOYENNE + PREMIUM → PROFESSIONNEL
UPDATE formules_abonnement SET
    plan_commercial   = 'PROFESSIONNEL',
    niveau_reporting  = 'AVANCE',
    api_access        = TRUE,
    federation_access = FALSE,
    support_prioritaire = TRUE,
    sla_garanti       = '99.9%',
    max_admins        = NULL
WHERE code = 'PREMIUM' AND plage = 'MOYENNE';

-- GRANDE + BASIC → AVANCE
UPDATE formules_abonnement SET
    plan_commercial   = 'AVANCE',
    niveau_reporting  = 'AVANCE',
    api_access        = TRUE,
    federation_access = FALSE,
    support_prioritaire = FALSE,
    sla_garanti       = '99.5%',
    max_admins        = 10
WHERE code = 'BASIC' AND plage = 'GRANDE';

-- GRANDE + STANDARD → PROFESSIONNEL
UPDATE formules_abonnement SET
    plan_commercial   = 'PROFESSIONNEL',
    niveau_reporting  = 'AVANCE',
    api_access        = TRUE,
    federation_access = FALSE,
    support_prioritaire = TRUE,
    sla_garanti       = '99.9%',
    max_admins        = NULL
WHERE code = 'STANDARD' AND plage = 'GRANDE';

-- GRANDE + PREMIUM → ENTERPRISE
UPDATE formules_abonnement SET
    plan_commercial   = 'ENTERPRISE',
    niveau_reporting  = 'AVANCE',
    api_access        = TRUE,
    federation_access = TRUE,
    support_prioritaire = TRUE,
    sla_garanti       = '99.9%',
    max_admins        = NULL
WHERE code = 'PREMIUM' AND plage = 'GRANDE';

-- TRES_GRANDE + BASIC → ENTERPRISE
UPDATE formules_abonnement SET
    plan_commercial   = 'ENTERPRISE',
    niveau_reporting  = 'AVANCE',
    api_access        = TRUE,
    federation_access = TRUE,
    support_prioritaire = TRUE,
    sla_garanti       = '99.9%',
    max_admins        = NULL
WHERE code = 'BASIC' AND plage = 'TRES_GRANDE';

-- TRES_GRANDE + STANDARD → ENTERPRISE
UPDATE formules_abonnement SET
    plan_commercial   = 'ENTERPRISE',
    niveau_reporting  = 'AVANCE',
    api_access        = TRUE,
    federation_access = TRUE,
    support_prioritaire = TRUE,
    sla_garanti       = '99.9%',
    max_admins        = NULL
WHERE code = 'STANDARD' AND plage = 'TRES_GRANDE';

-- TRES_GRANDE + PREMIUM → ENTERPRISE
UPDATE formules_abonnement SET
    plan_commercial   = 'ENTERPRISE',
    niveau_reporting  = 'AVANCE',
    api_access        = TRUE,
    federation_access = TRUE,
    support_prioritaire = TRUE,
    sla_garanti       = '99.9%',
    max_admins        = NULL
WHERE code = 'PREMIUM' AND plage = 'TRES_GRANDE';

-- ============================================================================
-- 3. Enrichir les statuts de souscriptions_organisation
-- ============================================================================

-- Ajout des statuts de cycle de vie avancés
ALTER TABLE souscriptions_organisation ADD COLUMN IF NOT EXISTS date_expiration TIMESTAMP WITH TIME ZONE;
ALTER TABLE souscriptions_organisation ADD COLUMN IF NOT EXISTS jours_grace INTEGER DEFAULT 7;
ALTER TABLE souscriptions_organisation ADD COLUMN IF NOT EXISTS auto_renouvellement BOOLEAN DEFAULT FALSE;
ALTER TABLE souscriptions_organisation ADD COLUMN IF NOT EXISTS motif_suspension TEXT;

-- ============================================================================
-- 4. Index sur plan_commercial pour filtrage catalogue
-- ============================================================================
CREATE INDEX IF NOT EXISTS idx_formule_plan_commercial ON formules_abonnement (plan_commercial);
