import os
from contextlib import asynccontextmanager
from dotenv import load_dotenv
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

from app.core.config import get_cors_origins
from app.api.auth import router as auth_router
from app.api.email_templates import router as email_templates_router
from app.api.email_logs import router as email_logs_router
from app.api.config import router as config_router
from app.api.customers import router as customers_router
from app.api.products import router as products_router
from app.api.invoices import router as invoices_router
from app.api.subscriptions import router as subscriptions_router
from app.api.telegram import router as telegram_router
from app.api.reminders import router as reminders_router
from app.api.stats import router as stats_router
from app.api.ai import router as ai_router

load_dotenv()

scheduler = None

@asynccontextmanager
async def lifespan(app: FastAPI):
    """Start APScheduler on startup, stop on shutdown."""
    global scheduler
    from app.services.reminder_service import setup_reminder_scheduler
    scheduler = setup_reminder_scheduler()
    yield
    if scheduler:
        scheduler.shutdown(wait=False)

app = FastAPI(title="ERP API", version="1.0.0", lifespan=lifespan)

app.add_middleware(
    CORSMiddleware,
    allow_origins=get_cors_origins(),
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# Register routers
app.include_router(auth_router)
app.include_router(email_templates_router)
app.include_router(email_logs_router)
app.include_router(config_router)
app.include_router(ai_router)
app.include_router(customers_router)
app.include_router(products_router)
app.include_router(invoices_router)
app.include_router(subscriptions_router)
app.include_router(telegram_router)
app.include_router(reminders_router)
app.include_router(stats_router)


@app.get("/api/health")
def health():
    return {"status": "ok", "service": "erp-api"}