
    jx                    
   S r SSKJr  SSKrSSKrSSKrSSKJr  \" \R                  R                  S5      =(       d    \" \
5      R                  S-  5      r/ SQrSS jrSS	 jr\S
:X  a  \R"                  " \" 5       5        gg)a  ERGON - Migration: free trial 14 dias + plan tiers.

Agrega columnas a `usuarios` para soportar el flow de prueba gratuita y la
suscripcion comercial (Sprint 5 GTM).

Columnas nuevas (idempotente):
    plan_tier            TEXT DEFAULT 'trial'    -- trial|n1|n2|n3|enterprise
    trial_started_at     TEXT                    -- ISO 'YYYY-MM-DD HH:MM:SS'
    trial_ends_at        TEXT                    -- ISO, default = started + 14 dias
    subscription_status  TEXT DEFAULT 'trial'    -- trial|active|expired|cancelled
    empresa              TEXT                    -- razon social Empresa Cliente (B2B)

Backfill: para cualquier usuario existente sin trial_started_at, se setea
trial_started_at = created_at (o 'now' si esta vacio) y trial_ends_at =
trial_started_at + 14 dias.

El admin@ergonpy.com se sale automaticamente del trial -> plan_tier='enterprise',
subscription_status='active', trial_ends_at = NULL.

Uso:
    python db/migrate_trial.py
    )annotationsN)PathDATABASE_PATHzergon.db))	plan_tierTEXT NOT NULL DEFAULT 'trial')trial_started_atTEXT)trial_ends_atr	   )subscription_statusr   )empresar	   c                |    U R                  SU S35      R                  5       nU Vs1 s H  o3S   iM	     sn$ s  snf )NzPRAGMA table_info()   )executefetchall)conntablarowsrs       /app/db/migrate_trial.py_columnas_existentesr   *   s=    <<,UG156??AD$QaD$s   9c                    [         R                  5       (       d   [        S[          3[        R                  S9  g[
        R                  " [        [         5      5      n  [        U S5      nU(       d*  [        S[        R                  S9   U R                  5         g/ n[         HR  u  p4X1;   a  [        SU S35        M  U R                  SU S	U 35        UR                  U5        [        S
U S35        MT     U R                  5         SnU R                  U5      n[        SUR                   S35        U R                  S5      nUR                  S:  a  [        SUR                   S35        U R                  5          U R                  S5        U R                  5         [        S[!        U5       S35         U R                  5         g! [
        R                   a     N@f = f! [
        R"                   a5  n[        SU 3[        R                  S9   S nAU R                  5         gS nAff = f! U R                  5         f = f)Nz[ERROR] DB no existe: )filer   usuariosu?   [ERROR] tabla usuarios no existe — correr migrate_f13 primeroz  [skip] columna 'z' ya existez ALTER TABLE usuarios ADD COLUMN  z  [add]  columna 'z
' agregadaad  
        UPDATE usuarios
        SET
            trial_started_at = COALESCE(trial_started_at, created_at, datetime('now')),
            trial_ends_at = COALESCE(
                trial_ends_at,
                datetime(COALESCE(created_at, datetime('now')), '+14 days')
            )
        WHERE trial_started_at IS NULL OR trial_ends_at IS NULL
        z  [backfill] z& usuario(s) con trial dates rellenadosz
            UPDATE usuarios
            SET plan_tier = 'enterprise',
                subscription_status = 'active',
                trial_ends_at = NULL
            WHERE email = 'admin@ergonpy.com' AND plan_tier != 'enterprise'
        r   z
  [admin] z admin promovido a enterprisezNCREATE INDEX IF NOT EXISTS idx_usuarios_trial_ends ON usuarios (trial_ends_at)z  [migrate_trial] OK. z columna(s) nuevas.z[ERROR] migration fallo: )DB_PATHexistsprintsysstderrsqlite3connectstrr   closeCOLUMNAS_NUEVASr   appendcommitrowcountOperationalErrorlenError)r   
existentes	agregadasnombre
definicionbackfill_sqlcures           r   mainr3   /   s   >>&wi0szzB??3w<(D9)$
;
SZ]ZdZdej 	

g  "	"1F#*6(+>?LL;F81ZLQRV$&vhj9: #2 		 ll<(cll^+QRS ll   <<!Js||n,IJK	LL` KKM 	&s9~&66IJK
 	

 '' 		
 == )!-CJJ?

	 	

sU   +G% C$G%  !G !G% G"G% !G""G% %H.9H)H1 )H..H1 1I__main__)r   zsqlite3.Connectionr   r#   returnzset[str])r5   int)__doc__
__future__r   osr!   r   pathlibr   environget__file__parentr   r%   r   r3   __name__exit     r   <module>rC      sw   , # 	  
  rzz~~o.V4>3H3H:3U
W 
>B zHHTV rB   