"""This module contains endpoints for operations related to devices."""

from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session

from backend.database.engine import get_db
from backend.schemas import devices as deviceschema
from backend.crud import devices as devicecrud
from backend.exceptions import NotFoundException


router = APIRouter(
    prefix="/devices",
    tags=["devices"]
)

tag_metadata = {
    "name": "devices",
    "description": "Operations related to devices."
}


@router.post("/", response_model=deviceschema.Device)
def create_device(device: deviceschema.DeviceCreate, db: Session = Depends(get_db)):
    try:
        return devicecrud.create_device(db, device)
    except NotFoundException as e:
        raise HTTPException(404, str(e))


@router.get("/{id}", response_model=deviceschema.Device)
def read_device(id: int, db: Session = Depends(get_db)):
    try:
        return devicecrud.read_device(db, id)
    except NotFoundException as e:
        raise HTTPException(404, str(e))


@router.patch("/{id}", response_model=deviceschema.Device)
def update_device(id: int, device: deviceschema.DeviceUpdate, db: Session = Depends(get_db)):
    try:
        return devicecrud.update_device(db, device, id)
    except NotFoundException as e:
        raise HTTPException(404, str(e))


@router.delete("/{id}", response_model=deviceschema.Device)
def delete_device(id: int, db: Session = Depends(get_db)):
    try:
        return devicecrud.delete_device(db, id)
    except NotFoundException as e:
        raise HTTPException(404, str(e))
