from contextlib import asynccontextmanager
from pathlib import Path
from fastapi import FastAPI
from fastapi.responses import FileResponse
from fastapi.staticfiles import StaticFiles
from sqlalchemy import select
from app.api.routes import router
from app.api.extended import router as extended_router
from app.api.enterprise import router as enterprise_router
from app.api.studio import router as studio_router
from app.api.v006 import router as v006_router
from app.api.v007 import router as v007_router
from app.api.v008 import router as v008_router
from app.api.v009 import router as v009_router
from app.api.v010 import router as v010_router
from app.api.v011 import router as v011_router
from app.api.v012 import router as v012_router
from app.api.v013 import router as v013_router
from app.api.v014 import router as v014_router
from app.api.v015 import router as v015_router
from app.api.v016 import router as v016_router
from app.api.v017 import router as v017_router
from app.api.v018 import router as v018_router
from app.api.v019 import router as v019_router
from app.api.v020 import router as v020_router
from app.api.v021 import router as v021_router
from app.api.v022 import router as v022_router
from app.api.v023 import router as v023_router
from app.api.v024 import router as v024_router
from app.api.v025 import router as v025_router
from app.api.v026 import router as v026_router
from app.api.v027 import router as v027_router
from app.api.v028 import router as v028_router
from app.api.v029 import router as v029_router
from app.api.v030 import router as v030_router
from app.api.v031 import router as v031_router
from app.api.v032 import router as v032_router
from app.api.v033 import router as v033_router
from app.api.v034 import router as v034_router
from app.api.v035 import router as v035_router
from app.api.v036 import router as v036_router
from app.api.v037 import router as v037_router
from app.api.v038 import router as v038_router
from app.core.tenant_middleware import TenantRuntimeMiddleware
from app.core.telemetry import configure_logging, telemetry_middleware, configure_tracing
from app.core.config import settings
from app.core.database import Base, SessionLocal, engine
from app.core.security import hash_password
from app.models.entities import Role, User
@asynccontextmanager
async def lifespan(_:FastAPI):
    Base.metadata.create_all(bind=engine); db=SessionLocal()
    try:
        admin=db.scalar(select(User).where(User.email==settings.default_admin_email))
        if not admin: db.add(User(email=settings.default_admin_email,password_hash=hash_password(settings.default_admin_password),full_name='Administrador Chemitec',role=Role.admin)); db.commit()
        from app.services.cluster import register_or_heartbeat
        register_or_heartbeat(db,capabilities=['api','health','websocket'])
        from app.services.commercial_platform import ensure_default_plans
        ensure_default_plans(db)
    finally: db.close()
    yield
configure_logging()
app=FastAPI(title='Chemitec Corporate Data Platform',version='0.38.0',lifespan=lifespan)
app.middleware('http')(telemetry_middleware)
app.add_middleware(TenantRuntimeMiddleware)
configure_tracing(app)
app.include_router(router); app.include_router(extended_router); app.include_router(enterprise_router); app.include_router(studio_router); app.include_router(v006_router); app.include_router(v007_router); app.include_router(v008_router); app.include_router(v009_router); app.include_router(v010_router); app.include_router(v011_router); app.include_router(v012_router); app.include_router(v013_router); app.include_router(v014_router); app.include_router(v015_router); app.include_router(v016_router); app.include_router(v017_router); app.include_router(v018_router); app.include_router(v019_router); app.include_router(v020_router); app.include_router(v021_router); app.include_router(v022_router); app.include_router(v023_router); app.include_router(v024_router); app.include_router(v025_router); app.include_router(v026_router); app.include_router(v027_router); app.include_router(v028_router); app.include_router(v029_router); app.include_router(v030_router); app.include_router(v031_router); app.include_router(v032_router); app.include_router(v033_router); app.include_router(v034_router); app.include_router(v035_router); app.include_router(v036_router); app.include_router(v037_router); app.include_router(v038_router); app.mount('/static',StaticFiles(directory='app/static'),name='static')
@app.get('/',include_in_schema=False)
def portal(): return FileResponse(Path('app/static/index.html'))
@app.get('/health')
def health(): return {'status':'ok','environment':settings.app_env,'version':'V038'}

@app.get('/enterprise',include_in_schema=False)
def enterprise_console(): return FileResponse(Path('app/static/enterprise.html'))

@app.get('/studio',include_in_schema=False)
def dashboard_studio(): return FileResponse(Path('app/static/studio.html'))

@app.get('/integration-studio',include_in_schema=False)
def integration_studio(): return FileResponse(Path('app/static/integration-studio.html'))

@app.get('/workflow-studio',include_in_schema=False)
def workflow_studio(): return FileResponse(Path('app/static/workflow-studio.html'))

@app.get('/ai-studio',include_in_schema=False)
def ai_studio(): return FileResponse(Path('app/static/ai-studio.html'))

@app.get('/communication',include_in_schema=False)
def communication_hub(): return FileResponse(Path('app/static/communication.html'))

@app.get('/mobile',include_in_schema=False)
def mobile_app(): return FileResponse(Path('app/static/mobile.html'))

@app.get('/manifest.webmanifest',include_in_schema=False)
def mobile_manifest(): return FileResponse(Path('app/static/manifest.webmanifest'),media_type='application/manifest+json')

@app.get('/service-worker.js',include_in_schema=False)
def service_worker(): return FileResponse(Path('app/static/service-worker.js'),media_type='application/javascript',headers={'Service-Worker-Allowed':'/'})

@app.get('/master-data',include_in_schema=False)
def master_data_hub(): return FileResponse(Path('app/static/master-data.html'))

@app.get('/data-quality',include_in_schema=False)
def data_quality_hub(): return FileResponse(Path('app/static/data-quality.html'))

@app.get('/observability',include_in_schema=False)
def observability_hub(): return FileResponse(Path('app/static/observability.html'))

@app.get('/high-availability',include_in_schema=False)
def high_availability_hub(): return FileResponse(Path('app/static/high-availability.html'))

@app.get('/semantic-hub',include_in_schema=False)
def semantic_hub(): return FileResponse(Path('app/static/semantic-hub.html'))

@app.get('/business-glossary',include_in_schema=False)
def business_glossary(): return FileResponse(Path('app/static/business-glossary.html'))

@app.get('/enterprise-search',include_in_schema=False)
def enterprise_search_page(): return FileResponse(Path('app/static/enterprise-search.html'))

@app.get('/semantic-execution',include_in_schema=False)
def semantic_execution_hub(): return FileResponse(Path('app/static/semantic-execution.html'))

@app.get('/federated-query',include_in_schema=False)
def federated_query_hub(): return FileResponse(Path('app/static/federated-query.html'))

@app.get('/federated-worker',include_in_schema=False)
def federated_worker_hub(): return FileResponse(Path('app/static/federated-worker.html'))

@app.get('/federated-orchestrator',include_in_schema=False)
def federated_orchestrator_hub(): return FileResponse(Path('app/static/federated-orchestrator.html'))

@app.get('/saas-admin',include_in_schema=False)
def saas_admin_hub(): return FileResponse(Path('app/static/saas-admin.html'))

@app.get('/tenant-isolation',include_in_schema=False)
def tenant_isolation_hub(): return FileResponse(Path('app/static/tenant-isolation.html'))

@app.get('/tenant-runtime',include_in_schema=False)
def tenant_runtime_hub(): return FileResponse(Path('app/static/tenant-runtime.html'))

@app.get('/saas-commercial',include_in_schema=False)
def saas_commercial_hub(): return FileResponse(Path('app/static/saas-commercial.html'))

@app.get('/modular-governance',include_in_schema=False)
def modular_governance_hub(): return FileResponse(Path('app/static/modular-governance.html'))

@app.get('/connectivity-hub',include_in_schema=False)
def connectivity_hub(): return FileResponse(Path('app/static/connectivity-hub.html'))

@app.get('/etl-studio',include_in_schema=False)
def etl_studio(): return FileResponse(Path('app/static/etl-studio.html'))

@app.get('/ai-center',include_in_schema=False)
def ai_center(): return FileResponse(Path('app/static/ai-center.html'))

@app.get('/commercial',include_in_schema=False)
def commercial_site(): return FileResponse(Path('app/static/commercial/index.html'))

@app.get('/commercial-admin',include_in_schema=False)
def commercial_admin(): return FileResponse(Path('app/static/commercial-admin.html'))

@app.get('/customer-portal',include_in_schema=False)
def customer_portal(): return FileResponse(Path('app/static/customer-portal.html'))

@app.get('/marketplace',include_in_schema=False)
def marketplace_page(): return FileResponse(Path('app/static/marketplace.html'))

@app.get('/partner-portal',include_in_schema=False)
def partner_portal_page(): return FileResponse(Path('app/static/partner-portal.html'))

@app.get('/data-quality-mdm',include_in_schema=False)
def data_quality_mdm_v031(): return FileResponse(Path('app/static/data-quality-mdm.html'))

@app.get('/ai-agent-builder',include_in_schema=False)
def ai_agent_builder_v032(): return FileResponse(Path('app/static/ai-agent-builder.html'))

@app.get('/corporate-os',include_in_schema=False)
def corporate_operating_system_v033(): return FileResponse(Path('app/static/corporate-os.html'))

@app.get('/deployment-center',include_in_schema=False)
def deployment_center_v034(): return FileResponse(Path('app/static/deployment-center.html'))


@app.get('/advanced-bi',include_in_schema=False)
def advanced_bi_v036(): return FileResponse(Path('app/static/advanced-bi.html'))
@app.get('/api-gateway',include_in_schema=False)
def api_gateway_v037(): return FileResponse(Path('app/static/api-gateway.html'))
@app.get('/lakehouse',include_in_schema=False)
def lakehouse_v035(): return FileResponse(Path('app/static/lakehouse.html'))

@app.get('/lowcode-studio',include_in_schema=False)
def lowcode_studio_v038(): return FileResponse(Path('app/static/lowcode-studio.html'))
