from fastapi import Depends, FastAPI, Request
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from sqlalchemy.orm import Session
from app.api.routers import clients, inventory, products
from app.api.routers import orders, designs
from app.api.routers.clients import get_db
from app.crud.clients import get_clients
from app.crud.orders import get_orders
from app.crud.products import get_products
from app.db.session import Base, engine

app = FastAPI(title="Sublimaciones Matiguan API")
templates = Jinja2Templates(directory="app/templates")

@app.on_event("startup")
def startup():
    Base.metadata.create_all(bind=engine)

@app.get("/")
async def dashboard(request: Request, db: Session = Depends(get_db)):
    return templates.TemplateResponse(request, "index.html", {"clients": get_clients(db)})

@app.get("/opciones")
async def dashboard_options(request: Request):
    return templates.TemplateResponse(request, "theme_options.html")

@app.get("/dashboard/1")
async def dashboard_option_one(request: Request):
    return templates.TemplateResponse(request, "dashboard_option_1.html")

@app.get("/dashboard/2")
async def dashboard_option_two(request: Request):
    return templates.TemplateResponse(request, "dashboard_option_2.html")

@app.get("/dashboard/3")
async def dashboard_option_three(request: Request):
    return templates.TemplateResponse(request, "dashboard_option_3.html")

@app.get("/clientes")
async def clients_page(request: Request, db: Session = Depends(get_db)):
    return templates.TemplateResponse(request, "clients.html", {"clients": get_clients(db)})

@app.get("/inventario")
async def inventory_page(request: Request):
    return templates.TemplateResponse(request, "inventory.html")

@app.get("/pedidos")
async def orders_page(request: Request, db: Session = Depends(get_db)):
    return templates.TemplateResponse(request, "orders.html", {"clients": get_clients(db), "orders": get_orders(db), "products": get_products(db)})

@app.get("/productos")
async def products_page(request: Request):
    return templates.TemplateResponse(request, "products.html")

app.include_router(clients.router, prefix="/clients", tags=["clients"]) 
app.include_router(inventory.router, prefix="/inventory", tags=["inventory"]) 
app.include_router(products.router, prefix="/products", tags=["products"]) 
app.include_router(orders.router, prefix="/orders", tags=["orders"]) 
app.include_router(designs.router, prefix="/designs", tags=["designs"]) 

# mount static files directory
app.mount("/static", StaticFiles(directory="app/static"), name="static")
