from fastapi import APIRouter, Depends, HTTPException
from sqlmodel import Session

from database import get_session
from models.signalphabet import SignAlphabet, SignAlphabetCreate
from repositories.signalphabet_repository import SignAlphabetRepository

router = APIRouter(prefix="/letters", tags=["Sign Alphabet"])


def get_repo(db: Session = Depends(get_session)):
    return SignAlphabetRepository(db)


# CREATE LETTER
@router.post("/", response_model=SignAlphabet)
def create_letter(
    letter: SignAlphabetCreate,
    repo: SignAlphabetRepository = Depends(get_repo)
):
    obj = SignAlphabet(**letter.model_dump())
    return repo.create(obj)


# GET ALL
@router.get("/", response_model=list[SignAlphabet])
def get_all(repo: SignAlphabetRepository = Depends(get_repo)):
    return repo.get_all()


# GET ONE
@router.get("/{letter_id}", response_model=SignAlphabet)
def get_one(letter_id: int, repo: SignAlphabetRepository = Depends(get_repo)):
    letter = repo.get_one(letter_id)
    if not letter:
        raise HTTPException(status_code=404, detail="Letter not found")
    return letter


# DELETE
@router.delete("/{letter_id}")
def delete(letter_id: int, repo: SignAlphabetRepository = Depends(get_repo)):
    deleted = repo.delete(letter_id)
    if not deleted:
        raise HTTPException(status_code=404, detail="Letter not found")
    return {"message": "Deleted"}

# UPDATE
@router.put("/{letter_id}", response_model=SignAlphabet)
def update(letter_id: int, updated_letter: SignAlphabetCreate, repo: SignAlphabetRepository = Depends(get_repo)):
    letter_obj = SignAlphabet(**updated_letter.model_dump())
    updated = repo.update(letter_id, letter_obj)
    if not updated:
        raise HTTPException(status_code=404, detail="Letter not found")
    return updated