from __future__ import annotations

import json
from datetime import date
from http import HTTPStatus
from urllib.parse import parse_qs


class MentorRoutesMixin:
    def _handle_mentor_get(self, parsed) -> bool:
        if parsed.path == "/api/mentors/setup":
            query = parse_qs(parsed.query)
            trade_date = query.get("trade_date", [date.today().isoformat()])[0]
            try:
                self.send_json(self.application_service.mentor_setup(trade_date))
            except ValueError as exc:
                self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST)
            return True
        if parsed.path == "/api/mentors/messages":
            query = parse_qs(parsed.query)
            try:
                self.send_json(
                    {
                        "items": self.application_service.mentor_messages(
                            query.get("mentor_id", [""])[0],
                            query.get("trade_date", [date.today().isoformat()])[0],
                        )
                    }
                )
            except ValueError as exc:
                self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST)
            return True
        return False

    def _handle_mentor_post(self, parsed) -> bool:
        if parsed.path == "/api/mentors/preferences":
            try:
                result = self.application_service.save_mentor_preferences(self.read_json_body())
                self.send_json({"ok": True, **result})
            except (ValueError, json.JSONDecodeError) as exc:
                self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST)
            return True
        return False

    def _handle_mentor_delete(self, parsed) -> bool:
        if parsed.path == "/api/mentors/messages":
            query = parse_qs(parsed.query)
            try:
                deleted = self.application_service.clear_mentor_messages(
                    query.get("mentor_id", [""])[0],
                    query.get("trade_date", [date.today().isoformat()])[0],
                )
                self.send_json({"ok": True, "deleted": deleted})
            except ValueError as exc:
                self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST)
            return True
        return False
