from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from django.utils.timezone import now
from .models import CareerTestResult
from .serializers import CareerTestSubmitSerializer, CareerTestResultSerializer

# ===== ЛОГИКА РАСЧЁТА ПРОФИЛЯ =====

EGE_SETS = {
    'R': {
        'title': 'Техника/производство/агро/транспорт',
        'ege': [
            '📐 Рус + Профмат + Физика (технические специальности)',
            '🌾 Рус + Биология + Химия (агрономия/ветеринария)',
            '🚗 Рус + Профмат + Информатика (автотранспорт)',
        ],
        'desc': 'Инженерия, строительство, транспорт, агрономия, техника.'
    },
    'I': {
        'title': 'IT/инженерия/наука/анализ',
        'ege': [
            '💻 Рус + Профмат + Информатика (IT/программирование)',
            '🔬 Рус + Профмат + Физика (инженерия/физика)',
            '📊 Рус + Профмат + Химия (технологии/материаловедение)',
        ],
        'desc': 'Программирование, инженерия, физика, математика, исследования.'
    },
    'A': {
        'title': 'Дизайн/медиа/креатив',
        'ege': [
            '🎨 Рус + Обществознание + Литература (журналистика/дизайн)',
            '📱 Рус + Профмат + Информатика (веб-дизайн/UI/UX)',
            '📸 Рус + История + Иностранный (медиа/реклама)',
        ],
        'desc': 'Дизайн, журналистика, реклама, медиа, творческие индустрии.'
    },
    'S': {
        'title': 'Помощь людям/педагогика/медицина',
        'ege': [
            '👩‍⚕️ Рус + Биология + Химия (медицина/биология)',
            '👨‍🏫 Рус + Обществознание + История (педагогика/психология)',
            '🧠 Рус + Обществознание + Биология (социология/социальная работа)',
        ],
        'desc': 'Медицина, педагогика, психология, социальная работа.'
    },
    'E': {
        'title': 'Управление/бизнес/право',
        'ege': [
            '⚖️ Рус + Обществознание + История (юриспруденция/госуправление)',
            '💼 Рус + Обществознание + Профмат (экономика/менеджмент)',
            '📈 Рус + Обществознание + Иностранный (международные отношения)',
        ],
        'desc': 'Юриспруденция, экономика, менеджмент, государственное управление.'
    },
    'C': {
        'title': 'Учёт/логистика/документы',
        'ege': [
            '📋 Рус + Обществознание + Профмат (бухучёт/логистика)',
            '📊 Рус + Профмат + Информатика (экономика/финансы)',
            '🏢 Рус + Обществознание + История (администрирование)',
        ],
        'desc': 'Бухгалтерия, логистика, документооборот, администрирование.'
    },
}


def calculate_profile(answers: dict) -> tuple:
    """
    Считает профиль по RIASEC системе.

    Возвращает: (profile, top3_profiles, recommended_ege_sets)
    """
    scores = {'R': 0, 'I': 0, 'A': 0, 'S': 0, 'E': 0, 'C': 0}

    # Маппинг вопросов на профили (если не знаешь — проверь исходный JS)
    for q_num in range(1, 25):
        key = f'q{q_num}'
        if key in answers:
            val = answers[key]
            if val in scores:
                scores[val] += 2

    # Топ-3 профиля
    sorted_profiles = sorted(scores.items(), key=lambda x: x[1], reverse=True)
    main_profile = sorted_profiles[0][0]
    top3 = [p[0] for p in sorted_profiles[:3]]

    # Рекомендованные наборы ЕГЭ для основного профиля
    recommended = EGE_SETS.get(main_profile, EGE_SETS['I'])

    return main_profile, top3, recommended


# ===== API ENDPOINT =====

class CareerTestSubmitView(APIView):
    """
    POST /api/career-test/submit/

    Тело запроса:
    {
        "answers": {"q1": "I", "q2": "A", ...},
        "ym_client_id": "123456789.1234567890"
    }

    Ответ:
    {
        "id": 42,
        "profile": "I",
        "profile_display": "Исследователь",
        "top3_profiles": ["I", "E", "C"],
        "recommended_ege_sets": {...},
        "created_at": "2025-12-13T18:30:00Z"
    }
    """

    def post(self, request):
        serializer = CareerTestSubmitSerializer(data=request.data)
        if not serializer.is_valid():
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

        answers = serializer.validated_data['answers']
        ym_client_id = serializer.validated_data.get('ym_client_id')

        # Расчёт профиля
        profile, top3, recommended_ege = calculate_profile(answers)

        # Сохрани результат в БД
        result = CareerTestResult.objects.create(
            answers=answers,
            profile=profile,
            top3_profiles=top3,
            recommended_ege_sets=recommended_ege,
            ym_client_id=ym_client_id,
            ip_address=self.get_client_ip(request),
            user_agent=request.META.get('HTTP_USER_AGENT', ''),
        )

        # Отправь ответ
        return Response(
            {
                'id': result.id,
                'profile': result.profile,
                'profile_display': result.get_profile_display(),
                'top3_profiles': result.top3_profiles,
                'recommended_ege_sets': result.recommended_ege_sets,
                'created_at': result.created_at.isoformat(),
            },
            status=status.HTTP_201_CREATED
        )

    def get_client_ip(self, request):
        """Получи реальный IP клиента"""
        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
        if x_forwarded_for:
            ip = x_forwarded_for.split(',')[0]
        else:
            ip = request.META.get('REMOTE_ADDR')
        return ip


class CareerTestResultsView(APIView):
    """GET /api/career-test/results/ — список всех результатов (для админа)"""

    def get(self, request):
        results = CareerTestResult.objects.all()
        serializer = CareerTestResultSerializer(results, many=True)
        return Response(serializer.data)
def index(request):
    """Возвращает главную страницу"""
    return render(request, 'index.html')