BASE_URL="http://127.0.0.1:43761/api/v1"

@mcp.tool(name="get_review_list", description="""
    Получает список отзывов (без текста) по различным параметрам.
    Можно получить отзывы для товара, бренда, категории или магазина.
    Тексты отзывов получаются отдельным методом @get_review_text
    Используй ТОЛЬКО аргументы перечисленные ниже.
    Args:
        mall: Код витрины (обязательный), получить из метода @get_malls
        id: Список ID продуктов через запятую
        after: Вернуть следующие элементы после заданного
        limit: Вернуть заданное число элементов
        category_id: Список ID категорий через запятую
        brand_id: Список ID брендов через запятую
        merchant_id: Список ID магазинов через запятую
        sort: Параметр сортировки. Возможные значения:
            - review_created_asc/review_created_desc: По дате создания отзыва
            - review_rate_asc/review_rate_desc: По оценке в отзыве
        review_created_from: Время создания отзыва от (timestamp)
        review_created_to: Время создания отзыва до (timestamp)
        review_rate_from: Оценка в отзыве от (1-5)
        review_rate_to: Оценка в отзыве до (1-5)
        answer_count_from: Кол-во ответов на отзыв от (если нужны отзывы с ответами - используй 1, если без ответов 0, иначе опускай поле)
        after_id: ID для пагинации (используется вместе с sort_values)
        sort_values: Значения сортировки для пагинации, полученные от предыдущего запроса. Используется вместе с after_id
    """)
def get_review_list(
        mall: str,
        id: Optional[str] = None,
        after: int = 0,
        limit: int = 10,
        category_id: Optional[str] = None,
        brand_id: Optional[str] = None,
        merchant_id: Optional[str] = None,
        sort: Optional[str] = None,
        review_created_from: Optional[int] = None,
        review_created_to: Optional[int] = None,
        review_rate_from: Optional[int] = None,
        review_rate_to: Optional[int] = None,
        answer_count_from: Optional[int] = None,
        after_id: Optional[str] = None,
        sort_values: Optional[str] = None
) -> dict:
    data = {"mall": mall, "after": after, "limit": limit}

    if id is not None:
        data["id"] = [int(x) for x in id.split(",")]
    if category_id is not None:
        data["categoryId"] = [int(x) for x in category_id.split(",")]
    if brand_id is not None:
        data["brandId"] = [int(x) for x in brand_id.split(",")]
    if merchant_id is not None:
        data["merchantId"] = [int(x) for x in merchant_id.split(",")]
    if sort is not None:
        data["sort"] = sort
    if after_id is not None:
        data["afterId"] = after_id

    if review_created_from is not None:
        data["reviewCreatedFrom"] = review_created_from
    if review_created_to is not None:
        data["reviewCreatedTo"] = review_created_to
    if review_rate_from is not None:
        data["reviewRateFrom"] = review_rate_from
    if review_rate_to is not None:
        data["reviewRateTo"] = review_rate_to
    if answer_count_from is not None:
        data["answerCountFrom"] = answer_count_from

    if sort_values is not None:
        data["sortValues"] = sort_values
    
    r = httpx.post(f"{BASE_URL}/review/list", data=data)
    response = r.json()

    return response

@mcp.tool(name="get_review_text", description="""
    Получает текстs отзывов (с текстами ответов) по их айди.
    Сами отзывы (с айди и без текста) можно получить методом @get_review_list
    Используй ТОЛЬКО аргументы перечисленные ниже.
    Args:
        mall: Код витрины (обязательный), получить из метода @get_malls
        id: Список ID отзывов через запятую
    """)
def get_review_text(
        mall: str,
        id: Optional[str] = None
) -> dict:
    data = {"mall": mall}

    if id is not None:
        data["id"] = [str(x) for x in id.split(",")]
    
    r = httpx.post(f"{BASE_URL}/review/comment", data=data)
    response = r.json()

    return response