"""
Survey constraint utilities for strategy generation.
"""
from typing import Dict, Any


def uses_social_networks(survey: Dict[str, Any]) -> bool:
    """
    Check if user uses social networks based on survey data.
    
    Args:
        survey: Survey data dictionary
        
    Returns:
        True if social networks are allowed, False if banned
    """
    social_skill = survey.get("social")
    
    # Handle enum values
    if social_skill == "dont use":
        return False
    
    # Handle text values (legacy)
    raw = str(social_skill or "").strip().lower()
    if not raw:
        return True
    
    deny_patterns = [
        "dont use", "don't use", "do not use", "no social", "no_social",
        "нет", "не польз", "не корист", "не користуюсь", "не користуєшся",
        "без соц", "never", "none"
    ]
    
    return not any(pattern in raw for pattern in deny_patterns)


def is_sports_technique(survey: Dict[str, Any]) -> bool:
    """
    Check if user practices sports massage technique.
    
    Args:
        survey: Survey data dictionary
        
    Returns:
        True if sports technique is used
    """
    tech = str(survey.get("technique") or "").strip().lower()
    return "sport" in tech or "спорт" in tech


def get_social_constraints_block(survey: Dict[str, Any]) -> str:
    social_skill = survey.get("social")
    
    # Если пользователь не пользуется соцсетями
    if not uses_social_networks(survey):
        return (
            "\nОГРАНИЧЕНИЕ ВАЖНО: Пользователь НЕ пользуется соцсетями. "
            "ЗАПРЕЩЕНО предлагать любые действия в соцсетях (Instagram, Facebook, TikTok, VK, Telegram-каналы, YouTube, Threads и т.п.). "
            "Разрешены только офлайн/несоцсетевые каналы: визитки/листівки, объявления/каталоги, сарафанное радио, партнёрства, "
            "стенды в локациях, Google Business Profile, сайт/лендинг, коллаборации с бизнесами, мероприятия, рекомендации, "
            "Avito/Юла, районные объявления, доски объявлений."
        )
    
    # Если пользователь пользуется соцсетями - даем рекомендации по уровню навыков
    if social_skill in ["active", "user"]:
        # Опытные пользователи соцсетей
        return (
            "\nРЕКОМЕНДАЦИИ ПО КАНАЛАМ: Пользователь активно пользуется соцсетями. "
            "ПРИОРИТЕТНЫЕ каналы: VK (местные группы), Telegram (каналы/чаты), локальные чаты (чат дома, чат подъезда, чат района, чат класса, чат школы, чат группы, чат потока, чат родителей, чат отдела, чат смены, чат бригады, чат филиала). "
            "СТРОГО ЗАПРЕЩЕНО упоминать Instagram и Facebook. "
            "Дополнительно: сарафанное радио, партнёрства, Google Business Profile."
        )
    elif social_skill in ["watcher", "registered"]:
        # Новички в соцсетях
        return (
            "\nРЕКОМЕНДАЦИИ ПО КАНАЛАМ: Пользователь новичок в соцсетях. "
            "ПРИОРИТЕТНЫЕ каналы: VK (простые группы), Telegram (личные сообщения), локальные чаты (чат дома, чат подъезда, чат района, чат класса, чат школы, чат группы, чат потока, чат родителей, чат отдела, чат смены, чат бригады, чат филиала). "
            "СТРОГО ЗАПРЕЩЕНО упоминать Instagram и Facebook. "
            "Дополнительно: офлайн каналы (визитки, объявления), сарафанное радио, Avito/Юла."
        )
    
    # По умолчанию - базовые рекомендации
    return (
        "\nРЕКОМЕНДАЦИИ ПО КАНАЛАМ: "
        "ПРИОРИТЕТНЫЕ каналы: VK (местные группы), Telegram (каналы/чаты), локальные чаты (чат дома, чат подъезда, чат района, чат класса, чат школы, чат группы, чат потока, чат родителей, чат отдела, чат смены, чат бригады, чат филиала). "
        "СТРОГО ЗАПРЕЩЕНО упоминать Instagram, Facebook, TikTok, YouTube, Threads. "
        "Дополнительно: сарафанное радио, партнёрства, офлайн каналы."
    )


def get_default_step1_for_sport_no_social(city: str) -> str:
    """
    Get default first step for sports technique without social networks.
    
    Args:
        city: User's city
        
    Returns:
        Default step text
    """
    return (
        "<b>Шаг 1: Быстрые контакты с тренерами</b>\\n"
        "Найди и запиши 5 телефонов/чатов тренеров из 2 ближайших спортзалов. Свяжись с двумя и предложи пробный массаж для их спортсмена.\\n"
        "Пример: <i>«Здравствуйте, я спортивный массажист рядом с {city}. Дам 1 пробный сеанс вашему атлету после тренировки, чтобы показать восстановление»</i>\\n"
        "Подшаги:\\n"
        "• Открой сайты/Google-карты двух залов и выпиши контакты тренеров (5+)\\n"
        "• Напиши 2 коротких сообщения/позвони 2 тренерам\\n"
        "• Зафиксируй 1 договорённость (встреча/пробник)"
    ).replace("{city}", city or "")


def get_default_step1_generic() -> str:
    """
    Get default first step for generic case.
    
    Returns:
        Default step text
    """
    return (
        "<b>Шаг 1: Быстрая точка контакта</b>\\n"
        "Сделай 5 коротких касаний с потенциальными партнёрами/клиентами из твоего канала привлечения.\\n"
        "Пример: <i>«Здравствуйте, я массажист рядом. Готов провести 1 пробный сеанс для вашего клиента/сотрудника»</i>\\n"
        "Подшаги:\\n"
        "• Выпиши 5 контактов\\n"
        "• Сделай 2 звонка/2 сообщения\\n"
        "• Зафиксируй 1 договорённость"
    )
