from datetime import date

from django.contrib.auth.hashers import make_password
from django.core.management.base import BaseCommand
from portfolio.models import (
    Achievement,
    Education,
    Experience,
    Project,
    Skill,
    StudentProfile,
)
from resume.models import ResumeTemplate
from users.models import User

HTML_A = """
<h1>{{ student.full_name }}</h1>
<p>{{ student.email }}</p>
{% for s in skills_highlight %}<span>{{ s.name }}</span>{% endfor %}
"""

HTML_B = """
<section><h2>{{ student.full_name }}</h2>
<p>Группа: {{ student.student_group }}</p></section>
"""


class Command(BaseCommand):
    help = "Создаёт тестовых студентов, портфолио и два шаблона резюме."

    def handle(self, *args, **options):
        if ResumeTemplate.objects.filter(name="Тест — минимальный").exists():
            self.stdout.write(self.style.WARNING("Тестовые данные уже загружены (шаблон есть)."))
            return

        ResumeTemplate.objects.create(
            name="Тест — минимальный",
            description="Короткий шаблон",
            html_template=HTML_A.strip(),
            css_styles="body{font-family:sans-serif}",
            is_active=True,
        )
        ResumeTemplate.objects.create(
            name="Тест — альтернативный",
            description="Второй шаблон",
            html_template=HTML_B.strip(),
            css_styles="body{color:#333}",
            is_active=True,
        )

        students_data = [
            ("stud1@test.local", "Анна", "Смирнова", "ИС-41"),
            ("stud2@test.local", "Борис", "Козлов", "ИС-41"),
            ("stud3@test.local", "Вера", "Орлова", "ПИ-22"),
        ]

        for i, (email, fn, ln, grp) in enumerate(students_data, start=1):
            u = User.objects.create(
                username=f"stud{i}_test",
                email=email,
                password=make_password("TestStud123!"),
                first_name=fn,
                last_name=ln,
                role=User.Role.STUDENT,
                is_verified=True,
            )
            p = StudentProfile.objects.create(
                user=u,
                first_name=fn,
                last_name=ln,
                student_group=grp,
                specialty="Информатика",
                bio=f"Студент {grp}, тестовые данные.",
            )
            Education.objects.create(
                student=p,
                institution="Тестовый университет",
                specialty="Прикладная информатика",
                degree="Бакалавр",
                start_year=2022,
                end_year=2026,
            )
            Experience.objects.create(
                student=p,
                company=f"ООО Практика {i}",
                position="Стажёр-разработчик",
                start_date=date(2024, 6, 1),
                end_date=date(2024, 8, 31),
                description="Разработка на Python/Django, работа с SQL.",
                location="Москва",
            )
            Project.objects.create(
                student=p,
                title=f"Проект портфолио #{i}",
                project_type=Project.ProjectType.COURSEWORK,
                description="Веб-приложение на Django REST + Alpine.js.",
                technologies="python, django, sql, docker",
                github_link="https://github.com/example/repo",
            )
            Project.objects.create(
                student=p,
                title=f"Личный бот {i}",
                project_type=Project.ProjectType.PERSONAL,
                description="Telegram-бот, async Python.",
                technologies="python, git",
            )
            Skill.objects.create(
                student=p,
                name="Python",
                level=Skill.Level.ADVANCED,
                category="Языки",
            )
            Skill.objects.create(
                student=p,
                name="Django",
                level=Skill.Level.INTERMEDIATE,
                category="Фреймворки",
            )
            Skill.objects.create(
                student=p,
                name="SQL",
                level=Skill.Level.INTERMEDIATE,
                category="БД",
            )
            Achievement.objects.create(
                student=p,
                title="Хакатон «Код будущего»",
                achievement_type=Achievement.AchievementType.HACKATHON,
                date=date(2024, 11, 15),
                result="3 место",
                organization="Тестовый вуз",
            )

        self.stdout.write(
            self.style.SUCCESS(
                "Готово: 3 студента, проекты/навыки/достижения, 2 шаблона. "
                "Пароль студентов: TestStud123!"
            )
        )
