from enum import Enum
from typing import Mapping

from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
from aiogram.utils.keyboard import InlineKeyboardBuilder

from src.database.enums import (
    Gender, PracticePlace, ClientsExperience,
    MassageTechnique, SocialSkill, CommunicationEase
)

GENDER_LABELS = {
    Gender.male: "Мужской",
    Gender.female: "Женский",
}

PLACE_LABELS = {
    PracticePlace.home_accept: "Дома у себя",
    PracticePlace.home_visit: "Выезжаете к клиентам на дом",
    PracticePlace.office: "Арендуете кабинет",
    PracticePlace.none: "Пока еще не начали принимать клиентов",
}

CLIENTS_LABELS = {
    ClientsExperience.none: "Пока клиентов совсем нет",
    ClientsExperience.few: "Делал массаж только друзьям/родственникам бесплатно",
    ClientsExperience.irregular: "Есть несколько знакомых, которые иногда обращаются",
    ClientsExperience.regular: "Да, есть постоянные клиенты",
}

TECH_LABELS = {
    MassageTechnique.classic: "Классический расслабляющий массаж",
    MassageTechnique.medicine: "Лечебный/медицинский массаж",
    MassageTechnique.sport_massage: "Спортивный массаж",
    MassageTechnique.anticell: "Антицеллюлитный",
    MassageTechnique.back_massage: "Массаж спины и шеи",
}

SOCIAL_LABELS = {
    SocialSkill.active: "Активно пользуюсь - публикую посты, истории",
    SocialSkill.user: "Пользуюсь для общения, но публикую редко",
    SocialSkill.watcher: "В основном читаю/смотрю, сам почти не публикую",
    SocialSkill.registered: "Зарегистрирован, но пользуюсь мало",
    SocialSkill.dont_use: "Совсем не пользуюсь соцсетями",}

COMM_LABELS = {
    CommunicationEase.without: "Очень тяжело даются новые знакомства",
    CommunicationEase.hard: "Довольно сложно, предпочитаю общение с знакомыми",
    CommunicationEase.shy: "Немного стесняюсь поначалу, но быстро привыкаю",
    CommunicationEase.little: "Нормально общаюсь, когда уже познакомились",
    CommunicationEase.confident: "Легко знакомлюсь, не стесняюсь начать разговор",}


def build_enum_kb(mapping: Mapping[Enum, str],prefix: str, columns: int = 2) -> InlineKeyboardMarkup:
    b = InlineKeyboardBuilder()
    for v, label in mapping.items():
        b.button(text=label, callback_data=f"{prefix}:{v.value}")
    b.adjust(columns)
    return b.as_markup()

def kb_gender(): return build_enum_kb(GENDER_LABELS, "gender", columns=3)
def kb_bot_gender(): return build_enum_kb(GENDER_LABELS, "bot_gender", columns=3)
def kb_place(): return build_enum_kb(PLACE_LABELS, "place", columns=1)
def kb_clients(): return build_enum_kb(CLIENTS_LABELS, "clients", columns=1)
def kb_technique(): return build_enum_kb(TECH_LABELS, "tech", columns=1)
def kb_social(): return build_enum_kb(SOCIAL_LABELS, "social", columns=1)
def kb_comm(): return build_enum_kb(COMM_LABELS, "comm", columns=1)


def kb_review() -> InlineKeyboardMarkup:
    """Review keyboard for strategy confirmation."""
    return InlineKeyboardMarkup(inline_keyboard=[
        [InlineKeyboardButton(text="✅ Подтверждаю", callback_data="review:accept")],
        [InlineKeyboardButton(text="✍️ Хочу внести правки", callback_data="review:edit")],
    ])
