"""SME-OmniStore FastAPI"""
from contextlib import asynccontextmanager
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse

from app.config import settings
from app.api.routers import auth, dashboard, products, orders, customers, categories, brands, member_levels
from app.api.routers.admin.settings import router as admin_settings_router
from app.api.routers.images import router as images_router
from app.api.routers.upload import router as upload_router
from app.api.routers.logistics_admin import router as logistics_admin_router
from app.api.routers.store.logistics import router as store_logistics_router
from app.api.routers.coupons_admin import router as coupons_admin_router
from app.api.routers.reviews_admin import router as reviews_admin_router
from app.api.routers.banners_admin import router as banners_admin_router
from app.api.routers.store import products as store_products
from app.api.routers.store import auth as store_auth
from app.api.routers.store import coupons as store_coupons
from app.api.routers.store import orders as store_orders
from app.api.routers.store import reviews as store_reviews
from app.api.routers.store import refunds as store_refunds
from app.api.routers.admin import refunds_admin
from app.api.routers.store import addresses as store_addresses
# orders_extended 已合并至 orders.py
from app.api.routers.pages import router as pages_router, store_router as store_pages_router
from app.api.routers.seo import router as seo_router
from app.core.services.plugin_loader import load_plugins

# 解析 CORS 来源列表（避免 pydantic v2 property 兼容问题）
_cors_origins = ["*"] if settings.DEBUG else [
    o.strip() for o in settings.ADMIN_CORS_ORIGINS.split(",") if o.strip()
]


@asynccontextmanager
async def lifespan(app: FastAPI):
    print("SME-OmniStore API starting")
    # 启动阶段：加载插件（插件失败不阻止主应用）
    await load_plugins(app)
    yield
    print("SME-OmniStore API stopped")


app = FastAPI(
    title="SME-OmniStore API",
    description="SaaS e-commerce platform",
    version="1.0.0",
    docs_url="/docs",
    redoc_url="/redoc",
    lifespan=lifespan,
)

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


@app.exception_handler(Exception)
async def global_exception_handler(request: Request, exc: Exception):
    return JSONResponse(
        status_code=500,
        content={"detail": f"Server error: {str(exc)}"},
    )

app.include_router(auth.router,             prefix="/api")
app.include_router(dashboard.router,        prefix="/api")
app.include_router(products.router,         prefix="/api")
app.include_router(brands.router,           prefix="/api")
app.include_router(images_router,           prefix="/api")
app.include_router(upload_router,           prefix="/api")
app.include_router(categories.router,       prefix="/api")
app.include_router(coupons_admin_router,    prefix="/api")
app.include_router(reviews_admin_router,    prefix="/api")
app.include_router(banners_admin_router,    prefix="/api")
app.include_router(orders.router,           prefix="/api")
app.include_router(customers.router,        prefix="/api")
app.include_router(member_levels.router,    prefix="/api")
app.include_router(member_levels.points_router, prefix="/api")
app.include_router(logistics_admin_router,  prefix="/api")
app.include_router(admin_settings_router,   prefix="/api")

app.include_router(store_products.router,   prefix="/api")
app.include_router(brands.store_router,     prefix="/api")
app.include_router(member_levels.store_router, prefix="/api")
app.include_router(store_auth.router,       prefix="/api")
app.include_router(store_coupons.router,    prefix="/api")
app.include_router(store_orders.router,     prefix="/api")
app.include_router(store_addresses.router,  prefix="/api")
app.include_router(store_reviews.router,    prefix="/api")
app.include_router(store_refunds.router,      prefix="/api")
app.include_router(refunds_admin.router,       prefix="/api")
app.include_router(pages_router,            prefix="/api")
app.include_router(store_logistics_router,  prefix="/api")
app.include_router(store_pages_router,      prefix="/api")

# SEO 插件路由（sitemap / robots.txt / 商品 SEO 数据）


@app.get("/health", tags=["system"])
async def health():
    return {"status": "ok", "env": settings.APP_ENV}


@app.get("/", tags=["system"])
async def root():
    return {"name": "SME-OmniStore API", "version": "1.0.0", "docs": "/docs"}
from app.api.routers.admin.inventory_alerts import router as inventory_alerts_router
from app.api.routers.admin.audit_logs import router as audit_logs_router

app.include_router(inventory_alerts_router, prefix="/api")
app.include_router(audit_logs_router,         prefix="/api")
