import os
import sqlite3
import sys
from pathlib import Path

# Adiciona o diretório raiz ao PYTHONPATH
root_dir = str(Path(__file__).parent.parent)
sys.path.append(root_dir)

from functions.base import Base, engine
from functions.database import init_database
from functions.rbac import init_rbac

def execute_sql_file(file_path):
    """Executa um arquivo SQL"""
    print(f"Executando arquivo {file_path}...")
    
    try:
        with open(file_path, 'r') as sql_file:
            sql_commands = sql_file.read().split(';')
            
            conn = sqlite3.connect('database.db')
            cursor = conn.cursor()
            
            for command in sql_commands:
                command = command.strip()
                if command:
                    try:
                        cursor.execute(command)
                    except sqlite3.OperationalError as e:
                        if "already exists" in str(e):
                            print(f"Aviso: {str(e)}")
                        else:
                            raise e
            
            conn.commit()
            conn.close()
            print(f"Arquivo {file_path} executado com sucesso!")
    except Exception as e:
        print(f"Erro ao executar {file_path}: {str(e)}")
        raise e

def migrate_database():
    """Executa a migração do banco de dados"""
    print("Inicializando banco de dados...")
    
    # Criar todas as tabelas
    Base.metadata.create_all(engine)
    
    # Executar scripts SQL
    sql_dir = Path(__file__).parent
    rbac_tables_sql = sql_dir / 'rbac_tables.sql'
    
    if rbac_tables_sql.exists():
        execute_sql_file(rbac_tables_sql)
    
    # Inicializar RBAC
    init_rbac()
    
    # Inicializar banco de dados
    init_database()
    
    print("Migração concluída com sucesso!")

if __name__ == '__main__':
    migrate_database() 