from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from typing import List, Dict

from app.common import schemas
from app.common.database import get_db
from ..services.department_service import (
    get_departments,
    get_department,
    create_department,
    update_department,
    delete_department
)
from ..services.auth_utils import validate_token

router = APIRouter()

@router.get("/departments", response_model=List[schemas.Department])
async def read_departments(
    skip: int = 0, 
    limit: int = 100, 
    db: Session = Depends(get_db),
    current_user: Dict = Depends(validate_token)
):
    departments = get_departments(db, skip=skip, limit=limit)
    return departments

@router.get("/departments/{department_id}", response_model=schemas.DepartmentDetail)
async def read_department(
    department_id: int, 
    db: Session = Depends(get_db),
    current_user: Dict = Depends(validate_token)
):
    return get_department(db, department_id=department_id)

@router.post("/departments", response_model=schemas.Department, status_code=status.HTTP_201_CREATED)
async def create_new_department(
    department: schemas.DepartmentCreate, 
    db: Session = Depends(get_db),
    current_user: Dict = Depends(validate_token)
):
    return create_department(db=db, department=department)

@router.put("/departments/{department_id}", response_model=schemas.Department)
async def update_existing_department(
    department_id: int, 
    department: schemas.DepartmentCreate, 
    db: Session = Depends(get_db),
    current_user: Dict = Depends(validate_token)
):
    return update_department(db=db, department_id=department_id, department=department)

@router.delete("/departments/{department_id}")
async def delete_existing_department(
    department_id: int, 
    db: Session = Depends(get_db),
    current_user: Dict = Depends(validate_token)
):
    return delete_department(db=db, department_id=department_id) 