# -*- coding: utf-8 -*-
# hub/ticket/domain/location_catalog.py

"""Справочник соответствия button_id и локации Ticket."""

from __future__ import annotations

from typing import Mapping


DEFAULT_BUTTON_LOCATIONS = {
    1: "ГБУЗ ФМБА ГП№1 (томограф Siemens, каб. 101)",
    2: "ГБУЗ ФМБА ГП№2 (ангиограф Амико, каб. 205)",
    3: "ГБУЗ ФМБА ГП№3 (рентген Philips, каб. 112)",
    4: "ГБУЗ ФМБА ГП№4 (рентген Shimadzu, каб. 305)",
    5: "ГБУЗ ФМБА ГП№5 (рентген Toshiba, каб. 208)",
    6: "ГБУЗ ФМБА ГП№6 (рентген GE, каб. 410)",
    7: "ГБУЗ ФМБА ГП№7 (рентген Canon, каб. 312)",
    8: "ГБУЗ ФМБА ГП№8 (рентген Hitachi, каб. 415)",
}


class LocationCatalog:
    """Канонический справочник локаций Ticket."""

    def __init__(self, locations: Mapping[int, str] | None = None):
        self._locations = dict(DEFAULT_BUTTON_LOCATIONS)
        if locations:
            self._locations.update({int(key): value for key, value in locations.items()})

    def get_location(self, button_id: int) -> str:
        """Вернуть локацию по button_id или fallback-описание."""
        return self._locations.get(button_id, f"Неизвестная локация #{button_id}")


def parse_location_parts(location: str) -> tuple[str, str, str]:
    """Разобрать строку локации на учреждение, кабинет и оборудование."""
    normalized_location = str(location or "").strip()
    if not normalized_location:
        return "", "", ""
    if "(" not in normalized_location or ")" not in normalized_location:
        return normalized_location, "", ""

    institution = normalized_location.split("(", 1)[0].strip()
    inside_brackets = normalized_location.split("(", 1)[1].split(")", 1)[0].strip()
    if not inside_brackets:
        return institution, "", ""
    if "каб." not in inside_brackets:
        return institution, "", inside_brackets

    device_part, room_part = inside_brackets.split("каб.", 1)
    room = f"каб. {room_part.strip().rstrip(',')}"
    device = device_part.strip().rstrip(",")
    return institution, room, device
