import logging
import os.path
import fastapi
from fastapi import APIRouter, UploadFile, File
from src.config import settings
from src.data.repositories.picture import PictureRepository as Repository
from src.api.dependencies import get_repository
from src.utils.file_system import save_file
from src.data.synchronisation.task import run

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

logger = logging.getLogger('api_logger')


@router.post(
    path="/{ref_item}",
    operation_id="uploadImage",
    name="files::upload-images"
)
async def upload_image(
        ref_item: int | str,
        image: UploadFile,
        repository: Repository = fastapi.Depends(get_repository(Repository))
) -> dict[str, bool]:
    logger.info("uploading image for %s with name %s", ref_item, image.filename)
    return {"success": await repository.upload_picture(ref_item, image)}


@router.get(
    path="",
    name="files::missing-images",
    operation_id="getListOfMissingImages",
    summary="the list of missing images to upload"
)
async def get_list_of_missing_images(
        repository: Repository = fastapi.Depends(get_repository(Repository))
) -> dict[str, str]:
    logger.info("determinate list of missing images")
    return await repository.get_missing_pictures()


@router.post(
    path="/upload-imports",
    operation_id="uploadImportFiles",
    name="files::upload-import-files",
    summary="upload of xml import files"
)
async def upload_import_file(file:UploadFile = File(...)) -> dict[str, bool]:
    logger.info("Upload import file")
    save_file(file.file, os.path.join(settings.import_path, file.filename))
    return {"success": True}


@router.get(
    path="/trigger-import",
    operation_id="triggerImport",
    name="files::trigger-import",
    summary="triggers import after upload of files"
)
async def trigger_import() -> dict[str, bool]:
    run()
    return {"success": True}
