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 route_management.models  # noqa: F401
import bus_management.models  # noqa: F401
import schedule_management.models  # noqa: F401
import reservation_management.models  # noqa: F401
import booking_management.models  # noqa: F401
import payment_management.models  # noqa: F401
import cancellation_management.models  # noqa: F401
import activity_logging.models  # noqa: F401

Base.metadata.create_all(bind=engine)

from user_management.router import router as user_management_router
from route_management.router import router as route_management_router
from bus_management.router import router as bus_management_router
from schedule_management.router import router as schedule_management_router
from reservation_management.router import router as reservation_management_router
from booking_management.router import router as booking_management_router
from payment_management.router import router as payment_management_router
from cancellation_management.router import router as cancellation_management_router
from activity_logging.router import router as activity_logging_router

app = FastAPI(
    title="Bus Booking System",
    description="A real-time seat reservation platform for bus travel with temporary reservation locks, concurrent booking protection, and comprehensive admin monitoring.",
    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(route_management_router)
app.include_router(bus_management_router)
app.include_router(schedule_management_router)
app.include_router(reservation_management_router)
app.include_router(booking_management_router)
app.include_router(payment_management_router)
app.include_router(cancellation_management_router)
app.include_router(activity_logging_router)