from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from utils.utils import Base, engine

# Import every module's models so ORM classes register with Base before create_all
import user_management.models  # noqa: F401
import tour_catalog.models  # noqa: F401
import booking_management.models  # noqa: F401
import service_provider_management.models  # noqa: F401
import payment_management.models  # noqa: F401
import review_management.models  # noqa: F401
import cancellation_management.models  # noqa: F401
import financial_management.models  # noqa: F401
import notification_management.models  # noqa: F401
import document_management.models  # noqa: F401

Base.metadata.create_all(bind=engine)

from user_management.router import router as user_management_router
from tour_catalog.router import router as tour_catalog_router
from booking_management.router import router as booking_management_router
from service_provider_management.router import router as service_provider_management_router
from payment_management.router import router as payment_management_router
from review_management.router import router as review_management_router
from cancellation_management.router import router as cancellation_management_router
from financial_management.router import router as financial_management_router
from notification_management.router import router as notification_management_router
from document_management.router import router as document_management_router

app = FastAPI(
    title="Tourism Management System",
    description="A comprehensive platform for managing tour packages, bookings, customer relationships, service providers, and financial operations in the tourism industry.",
    version="1.0.0"
)

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

app.include_router(user_management_router)
app.include_router(tour_catalog_router)
app.include_router(booking_management_router)
app.include_router(service_provider_management_router)
app.include_router(payment_management_router)
app.include_router(review_management_router)
app.include_router(cancellation_management_router)
app.include_router(financial_management_router)
app.include_router(notification_management_router)
app.include_router(document_management_router)