
    j(
                        S r SSKrSSKrSSKJr  S\R
                  S\S\S\4S jrS	\\-  S\	4S
 jr
\S:X  aR  SSKr\R                  R                  SS5      r\
" \5      r\" S\ 35        \R$                  " \S   (       a  SOS5        gg)a  
Migration F-Supabase: bridge ERGON usuarios <-> Supabase Auth

Agrega columna `supabase_uid TEXT UNIQUE NULL` a tabla `usuarios` para enlazar
con el sistema de autenticacion de Supabase, manteniendo compatibilidad con
usuarios legacy bcrypt (admin@demo.local, vitrium@demo.local).

Estrategia:
- Usuario nuevo via Supabase Auth (Google/Facebook/email) -> JWT incluye sub (UUID).
  Backend valida JWT con SUPABASE_JWT_SECRET, busca usuario por supabase_uid,
  si no existe lo crea automaticamente con rol='cliente'.
- Usuario legacy con password bcrypt -> sigue usando cookie ergon_session
  via /api/auth/login. supabase_uid queda NULL.
- Un usuario nunca tiene los dos al mismo tiempo (XOR).

Idempotente: CREATE INDEX IF NOT EXISTS + check schema antes de ALTER TABLE.
    N)Pathconntablecolumnreturnc                 t   ^ U R                  SU S35      n[        U4S jUR                  5        5       5      $ )z=Verifica si una columna existe en la tabla (SQLite-specific).zPRAGMA table_info()c              3   2   >#    U  H  oS    T:H  v   M     g7f)   N ).0rowr   s     "/app/db/migrate_supabase_bridge.py	<genexpr> column_exists.<locals>.<genexpr>   s     :>C1v>s   )executeanyfetchall)r   r   r   curs     ` r   column_existsr      s2    
,,+E7!4
5C:3<<>:::    db_pathc                 0   [        U 5      n U R                  5       (       d  SSU  3S.$ [        R                  " [	        U 5      5      nUR                  S5        SSSS.n [        USS5      (       d  UR                  S	5        SUS
'   UR                  S5        SUS'   UR                  5         SUS'   UR                  5         U$ ! [        R                   a'  nUR                  5         SUS'   SU 3US'    SnANHSnAff = f! UR                  5         f = f)zn
Aplica la migracion. Retorna dict con stats:
    {ok: bool, added_column: bool, added_index: bool, msg: str}
FzDB no existe: )okmsgzPRAGMA foreign_keys = ONT)r   added_columnadded_indexusuariossupabase_uidz6ALTER TABLE usuarios ADD COLUMN supabase_uid TEXT NULLr   z
            CREATE UNIQUE INDEX IF NOT EXISTS idx_usuarios_supabase_uid
            ON usuarios (supabase_uid)
            WHERE supabase_uid IS NOT NULL
        r   OKr   r   zSQL error: N)r   existssqlite3connectstrr   r   commitErrorrollbackclose)r   r   statses       r   migrater+      s   
 7mG>>nWI$>????3w<(DLL+,uEET:~>>LLQR$(E.! 	  	
  $me 	

L == )d$QC(e)
 	

s+    AC D C;6D ;D  D D__main__DATABASE_PATHz./db/ergon.dbzmigrate_supabase_bridge: r   r   )__doc__r"   syspathlibr   
Connectionr$   boolr   dictr+   __name__osenvirongetdbresultprintexitr   r   r   <module>r<      s   $  
 ;** ;3 ; ; ;%S4Z %D %P z		9BR[F	%fX
./HH&,QA& r   