# -*- coding: utf-8 -*-
"""Mock API responses for channels endpoints."""
from __future__ import annotations

import json
from playwright.sync_api import Page

_MOCK_CHANNELS = {
    "console": {
        "enabled": True,
        "bot_prefix": "",
        "show_tool_calls": True,
        "show_tool_results": True,
        "tool_call_max_length": 200,
        "tool_result_max_length": 500,
        "show_thinking": True,
    },
    "dingtalk": {
        "enabled": False,
        "bot_prefix": "",
        "show_tool_calls": True,
        "show_tool_results": True,
        "tool_call_max_length": 200,
        "tool_result_max_length": 500,
        "show_thinking": True,
    },
    "feishu": {
        "enabled": False,
        "bot_prefix": "",
        "show_tool_calls": True,
        "show_tool_results": True,
        "tool_call_max_length": 200,
        "tool_result_max_length": 500,
        "show_thinking": True,
    },
    "telegram": {
        "enabled": False,
        "bot_prefix": "",
        "show_tool_calls": True,
        "show_tool_results": True,
        "tool_call_max_length": 200,
        "tool_result_max_length": 500,
        "show_thinking": True,
    },
}

_MOCK_CHANNEL_TYPES = [
    "console",
    "dingtalk",
    "feishu",
    "telegram",
    "discord",
    "qq",
    "wecom",
    "mqtt",
]


def register(page: Page):
    """Register channels API route mocks."""

    def _handle_types(route):
        route.fulfill(
            status=200,
            content_type="application/json",
            body=json.dumps(_MOCK_CHANNEL_TYPES),
        )

    def _handle_list(route):
        route.fulfill(
            status=200,
            content_type="application/json",
            body=json.dumps(_MOCK_CHANNELS),
        )

    def _handle_get_channel(route):
        channel_name = route.request.url.split("/channels/")[-1].split("?")[0]
        # Skip qrcode routes
        if "/" in channel_name:
            route.fallback()
            return
        config = _MOCK_CHANNELS.get(channel_name, {"enabled": False})
        route.fulfill(
            status=200,
            content_type="application/json",
            body=json.dumps(config),
        )

    def _handle_update_channel(route):
        route.fulfill(
            status=200,
            content_type="application/json",
            body=json.dumps(_MOCK_CHANNELS),
        )

    page.route("**/api/config/channels/types**", _handle_types)
    page.route(
        "**/api/config/channels/*/qrcode**",
        lambda route: route.fallback(),
    )
    page.route("**/api/config/channels/*", _handle_get_channel)
    page.route("**/api/config/channels", _handle_list)
