
from sqlalchemy.orm import Session
from fastapi import HTTPException
from app.modules.{{ module_name }}.{{ module_name }}_repository import {{ class_name }}Repository
from app.modules.{{ module_name }}.{{ module_name }}_schema import {{ class_name }}Create, {{ class_name }}Update


class {{ class_name }}Service:
    def __init__(self, db: Session):
        self.{{ module_name }}_repo = {{ class_name }}Repository(db)

    def create_new_{{ module_name }}(self, {{ module_name }}_in: {{ class_name }}Create):
        return self.{{ module_name }}_repo.create({{ module_name }}_in)

    def list_{{ module_name }}s(self, skip: int = 0, limit: int = 100):
        return self.{{ module_name }}_repo.get_all(skip=skip, limit=limit)
    

    def get_{{ module_name }}_by_id(self, {{ module_name }}_id: int):
        {{ module_name }} = self.{{ module_name }}_repo.get_by_id({{ module_name }}_id)
        if not {{ module_name }}:
            raise HTTPException(status_code=404, detail="The {{ module_name }} was not found.")
        return {{ module_name }}

    def update_{{ module_name }}(self, {{ module_name }}_id: int, update_in: {{ class_name }}Update):
        {{ module_name }} = self.{{ module_name }}_repo.get_by_id({{ module_name }}_id)
        if not {{ module_name }}:
            raise HTTPException(status_code=404, detail="The {{ module_name }} was not found.")
        
        update_data = update_in.model_dump(exclude_unset=True)
        return self.{{ module_name }}_repo.update({{ module_name }}, update_data)

    def delete_{{ module_name }}(self, {{ module_name }}_id: int):
        {{ module_name }} = self.{{ module_name }}_repo.get_by_id({{ module_name }}_id)
        if not {{ module_name }}:
            raise HTTPException(status_code=404, detail="The {{ module_name }} was not found.")
        self.{{ module_name }}_repo.delete({{ module_name }})
        return {"detail": "The {{ module_name }} has been successfully deleted."}