from typing import Annotated

from fastapi import APIRouter, Depends
from sqlalchemy.ext.asyncio import AsyncSession

from app.db import get_session
from app.perusahaan.repository import CompanyRepository
from app.perusahaan.schemas import (
    CompanyPpnConfig,
    CompanyProfileResponse,
    CompanyQtyDecimalPlaces,
    CompanyReportProfile,
    CompanySchemaVersion,
)
from app.perusahaan.service import CompanyService


router = APIRouter(prefix="/api/msperusahaan", tags=["perusahaan"])


def get_company_service(
    session: Annotated[AsyncSession, Depends(get_session)],
) -> CompanyService:
    return CompanyService(CompanyRepository(session))


ServiceDependency = Annotated[CompanyService, Depends(get_company_service)]


@router.get("", response_model=CompanyProfileResponse)
async def get_company_profile(service: ServiceDependency) -> CompanyProfileResponse:
    return await service.get_company_profile()


@router.get("/report-profile", response_model=CompanyReportProfile)
async def get_report_profile(service: ServiceDependency) -> CompanyReportProfile:
    return await service.get_report_profile()


@router.get("/ppn", response_model=CompanyPpnConfig)
async def get_ppn_config(service: ServiceDependency) -> CompanyPpnConfig:
    return await service.get_ppn_config()


@router.get("/qty-decimal-places", response_model=CompanyQtyDecimalPlaces)
async def get_qty_decimal_places(service: ServiceDependency) -> CompanyQtyDecimalPlaces:
    return await service.get_qty_decimal_places()


@router.get("/schema-version", response_model=CompanySchemaVersion)
async def get_schema_version(service: ServiceDependency) -> CompanySchemaVersion:
    return await service.get_schema_version()
