from typing import List

from fastapi import APIRouter, HTTPException

from src.db.models.comic import Publisher
from src.db.repository.comics.publisher import get_publisher_details
from src.db.session import SessionDep
from src.schema.comics.publisher import PublisherResponse, publisher_to_response
from src.schema.comics.publisher_details import PublisherDetailsResponse


router = APIRouter()

@router.get("/publishers", response_model=List[PublisherResponse])
def get_all_publishers(db: SessionDep) -> List[PublisherResponse]:
    results: List[PublisherResponse] = []
    publishers = db.query(Publisher).all()
    for publisher in publishers:
        response: PublisherResponse = publisher_to_response(publisher)
        results.append(response)
    return results

@router.get("/publishers/{publisher_id}", response_model=PublisherResponse)
def get_publisher(publisher_id: str, db: SessionDep) -> PublisherResponse:
    publisher = db.get(Publisher, publisher_id)
    if publisher is None:
        raise HTTPException(status_code=404, detail="Publisher could not be found")
    response: PublisherResponse = publisher_to_response(publisher)
    return response

@router.get("/publishers/details/{publisher_id}", response_model=PublisherDetailsResponse)
def get_publisher_details_by_id(publisher_id: str, db: SessionDep) -> PublisherDetailsResponse:
    publisher = db.get(Publisher, publisher_id)
    if publisher is None:
        raise HTTPException(status_code=404, detail="Publisher could not be found")
    response: PublisherDetailsResponse = get_publisher_details(publisher)
    return response
