import logging

import pandas as pd
from fastapi import FastAPI

PATH_TO_SIMILAR_ITEMS = '../../recommendations/similar_items.parquet'

logger = logging.getLogger("uvicorn.error")

class SimilarItems:

    def __init__(self, path, **kwargs):

        """
        Загружаем данные из файла
        """
        logger.info(f"Loading data")
        self._similar_items = pd.read_parquet(path)
        self._similar_items = self._similar_items[kwargs['columns']]
        self._similar_items = self._similar_items.set_index('item_id')
        logger.info(f"Loaded")


    def get(self, item_id: int, k: int = 10):
        """
        Возвращает список k похожих объектов
        """

        try:
            i2i = self._similar_items.loc[item_id].head(k)
            i2i = {"item_id_2": i2i["sim_item_id"].tolist(), "score": i2i['score'].tolist()}
        except KeyError:
            logger.error("No recommendations found")
            i2i = {"item_id_2": [], "score": []}
        except: 
            logger.error("problem with similar recomendations")

        return i2i


sim_items_store = SimilarItems( 
    PATH_TO_SIMILAR_ITEMS,
    columns=["item_id", "sim_item_id", "score"])

logger.info("Ready!")

# создаём приложение FastAPI
app = FastAPI(title="features")

@app.get("/similar_items")
async def recommendations(item_id: int, k: int = 10):
    """
    Возвращает список похожих объектов длиной k для item_id
    """
    i2i = sim_items_store.get(item_id, k)

    return i2i