from typing import List
from typing import Dict
from typing import Union


# HTTP-request constants
SCHEDULE_URL: str = "https://kai.ru/raspisanie"
LECTURERS_SCHEDULE_URL: str = "https://kai.ru/for-staff/raspisanie"

CAS_LOGIN_URL: str = "https://cas.kai.ru:8443/cas/login"
CAS_SERVICE_LOGIN_URL: str = "https://cas.kai.ru:8443/cas/login?service=https://kai.ru/c/portal/login"
STUDENT_DATA_URL: str = "https://kai.ru/group/guest/student/{data_type}"

LOADING_REPLIES: List[str] = [
    "Стучусь на сервера kai.ru…",
    "Ожидание ответа от серверов kai.ru…"
]

AUTH_TOKEN_SIGN: str = "Liferay.authToken = '"
AUTH_TOKEN_LENGTH: int = 8


# UI constants
FULL_CLASS_ENTITIES: List[str] = [
    "*[ {time} ][ {place} ]*",
    "*[ {dates} ]*",
    "*{title}*",
    "_{type}_"
]

COMPACT_CLASS_ENTITIES: List[str] = [
    "*{time} • {place}*",
    "({dates})",
    "*{type}:* {title}"
]

LECTURER_ENTITY: str = "@ {lecturer}"
DEPARTMENT_ENTITY: str = "§ {department}"

GROUPS_ENTITY: str = "• У группы {group}"

FULL_EXAM_ENTITIES: List[str] = [
    "*[ {date}, {time} ][ {building}ка, {auditorium} ]*",
    "*{title}*"
]

COMPACT_EXAM_ENTITIES: List[str] = [
    "*{date}, {time} • {building}ка, {auditorium}*",
    "{title}"
]

SCORE_TEMPLATE: str = (
    "*{}*\n"
    "\n"
    "• 1 аттестация: {} / {}\n"
    "• 2 аттестация: {} / {}\n"
    "• 3 аттестация: {} / {}\n"
    "• 4 аттестация: {} / {}\n"
    "• 5 аттестация: {} / {}\n"
    "\n"
    "• Предварительная оценка: {}\n"
    "• Дополнительные баллы: {}\n"
    "\n"
    "• Долги: {}\n"
    "\n"
    "• Окончательная оценка: {}\n"
    "• Традиционная оценка: *{}*"
)


# Locations data constants
BUILDINGS: List[Dict[str, Union[str, float]]] = [
    {
        "button": "1",
        "title": "Первое учебное здание",
        "description": (
            "• Есть буфет и читальный зал №1.\n"
            "• Ближайшая остановка: КАИ."
        ),
        "address": "Карла Маркса, 10",
        "latitude": 55.7971077,
        "longitude": 49.1129913
    }, {
        "button": "2",
        "title": "Второе учебное здание",
        "description": (
            "• Есть буфет.\n"
            "• Ближайшие остановки: Четаева, Чистопольская, Амирхана, СК Олимп."
        ),
        "address": "Четаева, 18",
        "latitude": 55.8226860,
        "longitude": 49.1360610
    }, {
        "button": "3",
        "title": "Третье учебное здание",
        "description": (
            "• Есть буфет и читальный зал №3.\n"
            "• Ближайшие остановки: Толстого и Гоголя."
        ),
        "address": "Толстого, 15",
        "latitude": 55.7918200,
        "longitude": 49.1374140
    }, {
        "button": "4",
        "title": "Четвёртое учебное здание",
        "description": (
            "• Ни буфета, ни читального зала — грустно!\n"
            "• Ближайшие остановки: Толстого и Гоголя."
        ),
        "address": "Горького, 28/17",
        "latitude": 55.7931629,
        "longitude": 49.1374294
    }, {
        "button": "5",
        "title": "Пятое учебное здание",
        "description": (
            "• Есть столовая и читальный зал №2.\n"
            "• Ближайшая остановка: Площадь Свободы."
        ),
        "address": "Карла Маркса, 31/7",
        "latitude": 55.7969110,
        "longitude": 49.1237459
    }, {
        "button": "6",
        "title": "Шестое учебное здание",
        "description": (
            "• Есть буфет.\n"
            "• Ближайшие остановки: Институт, Кошевого, КМПО."
        ),
        "address": "Дементьева, 2а",
        "latitude": 55.8542530,
        "longitude": 49.0980440
    }, {
        "button": "7",
        "title": "Седьмое учебное здание",
        "description": (
            "• Есть буфет и читальный зал №9.\n"
            "• Ближайшие остановки: Гоголя и Толстого."
        ),
        "address": "Большая Красная, 55",
        "latitude": 55.7971410,
        "longitude": 49.1345289
    }, {
        "button": "8",
        "title": "Восьмое учебное здание",
        "description": (
            "• Есть буфет и научно-техническая библиотека.\n"
            "• Ближайшие остановки: Чистопольская, Четаева, СК Олимп, Амирхана."
        ),
        "address": "Четаева, 18а",
        "latitude": 55.8208035,
        "longitude": 49.1363205
    }
]

LIBRARIES: List[Dict[str, Union[str, int]]] = [
    {
        "button": "1",
        "title": "Читальный зал №1",
        "description": "*В 1ке.* Ближайшая остановка: КАИ.",
        "building": 1
    }, {
        "button": "2",
        "title": "Читальный зал №2",
        "description": "*В 5ке.* Ближайшая остановка: Площадь Свободы.",
        "building": 5
    }, {
        "button": "3",
        "title": "Читальный зал №3",
        "description": "*В 3ке.* Ближайшие остановки: Толстого и Гоголя.",
        "building": 3
    }, {
        "button": "9",
        "title": "Читальный зал №9",
        "description": "*В 7ке.* Ближайшие остановки: Гоголя и Толстого.",
        "building": 7
    }, {
        "button": "научно-техническая",
        "title": "Научно-техническая",
        "description": "*В 8ке.* Ближайшие остановки: Чистопольская, Четаева, СК Олимп, Амирхана.",
        "building": 8
    }
]

SPORTSCOMPLEX: List[Dict[str, Union[str, float]]] = [
    {
        "button": "Главное здание",
        "title": "Главное здание",
        "description": "Ближайшие остановки: СК Олимп, Чистопольская, Четаева, Амирхана.",
        "address": "Чистопольская, 65",
        "latitude": 55.8201111,
        "longitude": 49.1398743
    }, {
        "button": "Здание бассейна",
        "title": "Здание бассейна",
        "description": "Ближайшие остановки: СК Олимп, Чистопольская, Четаева, Амирхана.",
        "address": "Чистопольская, 65",
        "latitude": 55.821139,
        "longitude": 49.1402243
    }, {
        "button": "Стадион",
        "title": "Стадион",
        "description": "Ближайшие остановки: СК Олимп, Чистопольская, Четаева, Амирхана.",
        "address": "Чистопольская, 65",
        "latitude": 55.821703,
        "longitude": 49.140717
    }
]

DORMS: List[Dict[str, Union[str, float]]] = [
    {
        "button": "1",
        "title": "Первое общежитие",
        "description": "Ближайшая остановка: КАИ.",
        "address": "Большая Красная, 7/9",
        "latitude": 55.7984276,
        "longitude": 49.1154430
    }, {
        "button": "2",
        "title": "Второе общежитие",
        "description": (
            "• Есть столовая.\n"
            "• Ближайшая остановка: КАИ."
        ),
        "address": "Большая Красная, 18",
        "latitude": 55.7978831,
        "longitude": 49.1147940
    }, {
        "button": "3",
        "title": "Третье общежитие",
        "description": (
            "• Есть столовая.\n"
            "• Ближайшие остановки: Попова, Пионерская, Губкина, Арбузова, Национальный архив."
        ),
        "address": "Кирпичникова, 11",
        "latitude": 55.8095929,
        "longitude": 49.1998827
    }, {
        "button": "4",
        "title": "Четвёртое общежитие",
        "description": "Ближайшие остановки: Солнышко, Короленко, Октябрьская, Голубятникова.",
        "address": "Короленко, 85",
        "latitude": 55.8379590,
        "longitude": 49.1009150
    }, {
        "button": "5",
        "title": "Пятое общежитие",
        "description": (
            "• Есть столовая."
            "• Ближайшие остановки: Абжалилова, Кооперативный институт, Патриса Лумумбы, парк Горького."
        ),
        "address": "Ершова, 30",
        "latitude": 55.7927011,
        "longitude": 49.1644210
    }, {
        "button": "6",
        "title": "Шестое общежитие",
        "description": "Ближайшие остановки: Вишневского, Товарищеская, Достоевского, Калинина.",
        "address": "Товарищеская, 30",
        "latitude": 55.7851918,
        "longitude": 49.1559488
    }, {
        "button": "7",
        "title": "Седьмое общежитие",
        "description": "Ближайшие остановки: Вишневского, Товарищеская, Достоевского, Калинина.",
        "address": "Товарищеская, 30а",
        "latitude": 55.7853090,
        "longitude": 49.1549720
    }
]
