import os
from flask import Flask, send_from_directory, jsonify
from flask_cors import CORS
from app.config import Config
from app.database import db
from app.auth import init_default_users
from app.seeder import seed_database_if_empty
from app.routes.api_auth import auth_bp
from app.routes.api_bi import bi_bp
from app.routes.api_intelligence import intelligence_bp
from app.routes.api_conversations import conversations_bp
from app.routes.api_admin import admin_bp

app = Flask(__name__, static_folder="static", static_url_path="")
CORS(app)

# Registra Blueprints da API
app.register_blueprint(auth_bp, url_prefix="/api/auth")
app.register_blueprint(bi_bp, url_prefix="/api/bi")
app.register_blueprint(intelligence_bp, url_prefix="/api/intelligence")
app.register_blueprint(conversations_bp, url_prefix="/api/conversations")
app.register_blueprint(admin_bp, url_prefix="/api/admin")

# Endpoint de Healthcheck para Docker / Cloudflare / Monitoramento
@app.route("/api/health")
def healthcheck():
    return jsonify({
        "status": "healthy",
        "service": "DuoBI",
        "db": "connected" if db.connected else "disconnected"
    }), 200

# Rotas do Frontend SPA
@app.route("/")
def index():
    return send_from_directory("static", "index.html")

@app.route("/<path:path>")
def static_files(path):
    if os.path.exists(os.path.join("static", path)):
        return send_from_directory("static", path)
    return send_from_directory("static", "index.html")

# Tratamento de Erros
@app.errorhandler(404)
def not_found(e):
    return jsonify({"success": False, "error": "Endpoint não encontrado"}), 404

@app.errorhandler(500)
def server_error(e):
    return jsonify({"success": False, "error": "Erro interno do servidor", "details": str(e)}), 500

def initialize_app():
    """Inicializa banco, schemas, usuários e dados de exemplo."""
    print("\n" + "="*60)
    print("  [INIT] INICIALIZANDO PORTAL DUOBI - DUOTALK CRM INTELLIGENCE")
    print("="*60)
    db.init_database()
    init_default_users()
    seed_database_if_empty(force=False)
    print(f"  [READY] Servidor pronto para atender em http://localhost:{Config.PORT}")
    print("="*60 + "\n")

# Auto-inicialização quando importado por servidores WSGI (Gunicorn / uWSGI)
try:
    initialize_app()
except Exception as _err:
    print(f"[INIT NOTICE] Auto-inicialização: {_err}")

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=Config.PORT, debug=Config.DEBUG)
