def extract_keywords(vacancy_text):
    """Извлечение ключевых слов из вакансии.

    skills — языки и инструменты; technologies — фреймворки/стеки;
    soft_skills — гибкие навыки.
    """
    # Фреймворки и платформы (отдельно от «языков»)
    technologies_terms = [
        "django",
        "flask",
        "fastapi",
        "react",
        "vue",
        "angular",
        "spring",
        "laravel",
        "rails",
        ".net",
    ]
    skills_terms = [
        "python",
        "sql",
        "javascript",
        "java",
        "c++",
        "git",
        "docker",
        "rest api",
        "kubernetes",
        "linux",
    ]
    soft_skills = [
        "коммуникабельность",
        "ответственность",
        "лидерство",
        "работа в команде",
        "аналитическое мышление",
    ]

    raw = (vacancy_text or "").strip()
    text_lower = raw.lower()
    keywords = {
        "skills": [],
        "technologies": [],
        "soft_skills": [],
        "vacancy_summary": raw[:400],
    }

    for term in technologies_terms:
        if term in text_lower:
            keywords["technologies"].append(term)

    for term in skills_terms:
        if term in text_lower:
            keywords["skills"].append(term)

    for soft in soft_skills:
        if soft in text_lower:
            keywords["soft_skills"].append(soft)

    return keywords
