from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from src.apps.stores import controller, services
from src.apps.stores.schemas import StoreCreate, StoreResponse, BranchCreate, BranchResponse,StoreUpdate
from src.utils.db import get_db
from src.apps.users.models import User
from src.apps.stores.models import StoreType
from typing import List
from src.apps.auth.controller import get_current_user

router = APIRouter()

# ---------------- Store Endpoints ----------------

@router.post("/")
def create_store_api(
    store: StoreCreate, 
    db: Session = Depends(get_db), 
    current_user: User = Depends(get_current_user)
):
    return controller.create_store_controller(store, db, current_user)



@router.get("/")
def get_store(db: Session = Depends(get_db), current_user: User = Depends(get_current_user)):
    return controller.get_store_controller(db, current_user)



@router.put("/")
def update_store(
    store_update: StoreUpdate,  
    db: Session = Depends(get_db),
    current_user: User = Depends(get_current_user)
):
    return controller.update_store_controller(store_update, db, current_user)


@router.delete("/delete")
def delete_store(db: Session = Depends(get_db), current_user: User = Depends(get_current_user)):
    return controller.delete_store_controller(db, current_user)

# ---------------- Branch Endpoints ----------------

@router.post("/branches/")
def create_branch_endpoint(
    branch: BranchCreate,  # Use BranchCreate as request model
    db: Session = Depends(get_db), 
    current_user: User = Depends(get_current_user)
):
    return services.create_branch(db, branch, current_user)



@router.get("/{store_id}/branches")
def get_branches(
    store_id: str,  
    db: Session = Depends(get_db), 
    current_user: User = Depends(get_current_user)
):
    return controller.get_branches_by_store_id_controller(store_id, db,current_user)



@router.get("/{store_id}/branches/{branch_id}")
def get_branch_by_id(
    store_id: str,
    branch_id: str,
    db: Session = Depends(get_db),
    current_user: User = Depends(get_current_user)
):
    return controller.get_branch_by_id_controller(store_id, branch_id, db,current_user)


@router.put("/branches/{branch_id}")
def update_branch_api(
    branch_id: str,  
    branch: BranchCreate, 
    db: Session = Depends(get_db), 
    current_user: User = Depends(get_current_user)
):
    return controller.update_branch_controller(branch_id, branch, db, current_user)



@router.delete("/branches/{branch_id}")
def delete_branch(
    branch_id: str,  
    db: Session = Depends(get_db), 
    current_user: User = Depends(get_current_user)
):
    return controller.delete_branch_controller(branch_id, db, current_user)


@router.get("/store-types/")
def get_store_types(db: Session = Depends(get_db)):
    """
    API to fetch the list of store types.
    """
    store_types = db.query(StoreType).all()
    
    if not store_types:
        raise HTTPException(
            status_code=404,
            detail={"status": False, "code": 404, "message": "No store types found"}
        )
    
    return {
        "status": True,
        "code": 200,
        "message": "Store types fetched successfully",
        "data": [
            {"storetype_id": store.storetype_id, "store_type": store.store_type} 
            for store in store_types
        ]
    }
