
    jL                         S r SSKrSSKrSSKrSSKJr  S\R                  S\S\4S jr	S\
4S jr\S	:X  a1  \" 5       r\" S
\ 35        \R                  " \S   (       a  SOS5        gg)a  
Init DB on Railway first boot.

Si DATABASE_PATH no existe (caso volumen Railway recien creado),
inicializa schema desde init_db.sql + aplica migrations + crea
usuario admin minimo (admin@ergonpy.com con password definida en
env ERGON_ADMIN_PASSWORD, fallback a 'change-me-on-first-login').

Idempotente: si la DB existe con tablas, retorna early sin tocar nada.

Uso:
    from init_railway_db import ensure_db_initialized
    ensure_db_initialized()  # llamar al inicio del servidor
    N)Pathconnnamereturnc                 L    U R                  SU45      nUR                  5       S L$ )Nz>SELECT name FROM sqlite_master WHERE type='table' AND name = ?)executefetchone)r   r   curs      /app/db/init_railway_db.py_table_existsr      s+    
,,H	C <<>%%    c                     [        [        R                  R                  SS5      5      n U R                  n UR                  SSS9  [        R                  " [        U 5      5      nUR                  S5        [        US5      n[        [        5      R                  S-  nUR                  5       (       d#  UR                  5         SS	[        U 5      S
U 3S.$ [        USSS9 nUR                  5       nSSS5        UR!                  W5        UR#                  5         SSKJn  / nS H~  n	 U" U	5      n
[)        U
S5      (       a-  U
R+                  [        U 5      5        UR-                  U	5        MJ  [)        U
S5      (       a#  U
R/                  5         UR-                  U	5        M~  M      SSKJnJn  Sn[        R                  R                  SS5      nU" X.5      nUc  U" UUUSSS.5        SnOSn UR                  5         SU(       d  S OS![        U 5      S"U S#U 3S.$ ! , (       d  f       GN5= f! [0         a*  n[3        SU	 SU 3[4        R6                  S9   SnAGM<  SnAff = f! [0         a'  n[3        SU 3[4        R6                  S9  Sn SnANSnAff = f! [        R>                   a  nSS	[        U 5      S$U 3S.s SnA$ SnAf[0         a  nSS	[        U 5      S%U 3S.s SnA$ SnAff = f)&z
Asegura que la DB en DATABASE_PATH este inicializada.

Retorna dict con info de la operacion:
    {ok: bool, action: 'created'|'existed'|'error', path: str, msg: str}
DATABASE_PATHz./db/ergon.dbT)parentsexist_okzPRAGMA foreign_keys = ONobraszinit_db.sqlFerrorzinit_db.sql no encontrado en )okactionpathmsgrzutf-8)encodingNr   )import_module)
migrate_f8
migrate_f9migrate_f13migrate_f_marcamigrate_parser_bitacoramigrate_supabase_bridgemigrate_trialmigratemainz![init_railway_db] WARN migration z: )file)create_usuarioget_usuario_by_emailzadmin@ergonpy.comERGON_ADMIN_PASSWORDzchange-me-on-first-loginzERGON Adminadmin)emailpasswordnombrerolz#[init_railway_db] WARN admin user: createdsyncedzDB sincronizada. Migrations: z. Admin creado: zSQL error: zError: ) r   osenvirongetparentmkdirsqlite3connectstrr   r   __file__existscloseopenreadexecutescriptcommit	importlibr   hasattrr"   appendr#   	Exceptionprintsysstderr	api_obrasr%   r&   Error)db_pathdb_dirr   	had_obrassql_pathf
schema_sqlr   migrations_aplicadasmig_namemoder%   r&   admin_email	admin_pwdexistingadmin_createds                     r   ensure_db_initializedrU      s    2::>>/?CDG^^F^
 	TD1 s7|,/0!$0	 >((=8  JJL!G6xjA	  (C'2aJ 3:& 	,!
H\#H-3	**KKG-(//9S&))HHJ(//9 *
.	"F-K

'=?YZI+D>Ht( )+"	&  !% %
 	

'0ihL23G2HHXYfXgh	
 	
i 326  \9(2aSIPSPZPZ[[\(  	"7s;#**M!M	" == 
L $	
 	
  
LQC=	
 	

s   BJ J "H!36J *AH3.J 02H3"J )AI* .J /I* 1/J !
H0+J 3
I'=I"J "I''J *
J4JJ JJ K42K
K4
K4K/)K4/K4__main__zinit_railway_db: r      )__doc__r/   r4   rC   pathlibr   
Connectionr6   boolr   dictrU   __name__resultrB   exit r   r   <module>ra      s    
  
 &** &# &$ &h
t h
V z"$F	fX
&'HH&,QA& r   