import wagtail_factories
from django.conf import settings
from django.core.management import call_command
from wagtail.models import Locale, Page, Site
from wagtail_localize.models import LocaleSynchronization

from vbv_lernwelt.core.admin import User
from vbv_lernwelt.course.consts import COURSE_UK1
from vbv_lernwelt.course.models import CoursePage
from vbv_lernwelt.learnpath.create_default_learning_path import (
    create_learning_content_beenden,
)
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
    CircleFactory,
    LearningContentFactory,
    LearningPathFactory,
    LearningSequenceFactory,
    LearningUnitFactory,
    TopicFactory,
)

# todo: remove when all Handlungsfelder are ready
READY_HF = ["Fahrzeug", "Reisen"]


def create_uk_learning_path(course_id=COURSE_UK1, user=None, skip_locales=True):
    if user is None:
        user = User.objects.get(username="info@iterativ.ch")

    site = Site.objects.filter(is_default_site=True).first()

    if not site:
        site = wagtail_factories.SiteFactory(is_default_site=True)

    if settings.APP_ENVIRONMENT == "development":
        site.port = 8000
        site.save()

    course_page = CoursePage.objects.get(course_id=course_id)
    lp = LearningPathFactory(
        title="Lernpfad",
        parent=course_page,
    )

    TopicFactory(title="Kickoff", is_visible=False, parent=lp)
    create_uk_circle(lp, title="Kickoff")

    TopicFactory(title="Basis", is_visible=False, parent=lp)
    create_uk_circle(lp, title="Basis")

    TopicFactory(title="Fahrzeug", is_visible=False, parent=lp)
    create_uk_circle(lp, title="Fahrzeug")

    TopicFactory(title="Haushalt Teil 1", is_visible=False, parent=lp)
    create_uk_circle(lp, title="Haushalt Teil 1")

    TopicFactory(title="Haushalt Teil 2", is_visible=False, parent=lp)
    create_uk_circle(lp, title="Haushalt Teil 2")

    # circle_analyse = create_circle("Betreuen", lp)
    # create_circle_children(circle_analyse, "Betreuen")
    #
    # TopicFactory(title="Prüfung", is_visible=True, parent=lp)
    # circle_analyse = create_circle("Prüfungsvorbereitung", lp)
    # create_circle_children(circle_analyse, "Prüfungsvorbereitung")

    # locales
    if not skip_locales:
        locale_de = Locale.objects.get(language_code="de-CH")
        locale_fr, _ = Locale.objects.get_or_create(language_code="fr-CH")
        LocaleSynchronization.objects.get_or_create(
            locale_id=locale_fr.id, sync_from_id=locale_de.id
        )
        locale_it, _ = Locale.objects.get_or_create(language_code="it-CH")
        LocaleSynchronization.objects.get_or_create(
            locale_id=locale_it.id, sync_from_id=locale_de.id
        )
        call_command("sync_locale_trees")

    # all pages belong to 'admin' by default
    Page.objects.update(owner=user)


def create_uk_circle(lp, title="Kickoff"):
    circle = CircleFactory(
        title=title,
        parent=lp,
        description="""
In diesem Circle erfährst du wie der Lehrgang aufgebaut ist.
Zudem lernst du die wichtigsten Grundlagen,
damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
    """.strip(),
        goal_description="In diesem Circle baust du Grundlagenwissen für die folgenden Themenfelder auf:",
        goals=[
            ("goal", "Aufbau und Umgang mit dem Lernpfad"),
            ("goal", "Lerntechnik"),
            ("goal", "Arbeitstechnik"),
            ("goal", "Beraten und Verkaufen"),
            ("goal", "Versicherungswirtschaft"),
            ("goal", "Versicherungsrecht"),
        ],
        job_situations=[],
    )
    LearningSequenceFactory(title="Start", parent=circle, icon="it-icon-ls-start")
    LearningUnitFactory(title="Einführung", parent=circle)
    LearningContentFactory(
        title="Willkommen im üK",
        parent=circle,
    )
    LearningUnitFactory(title="Arbeits- und Lerntechnik", parent=circle)
    LearningContentFactory(
        title="Mediathek",
        parent=circle,
    )
    LearningContentFactory(
        title="Luca organisiert seinen Arbeitsalltag",
        parent=circle,
    )
    LearningContentFactory(
        title="Luca legt sich seine Lernstrategie zurecht",
        parent=circle,
    )
    LearningContentFactory(
        title="Fachcheck Arbeits- und Lerntechnik",
        parent=circle,
    )
    LearningSequenceFactory(title="Training", parent=circle, icon="it-icon-ls-watch")
    LearningUnitFactory(title="Versicherung", parent=circle)
    LearningContentFactory(
        title="Mediathek",
        parent=circle,
    )
    LearningContentFactory(
        title="Luca startet durch",
        parent=circle,
    )
    LearningContentFactory(
        title="Fachcheck Allgemeines zu Versicherungen",
        parent=circle,
    )
    LearningUnitFactory(title="Beratung und Verkauf", parent=circle)
    LearningContentFactory(
        title="Mediathek",
        parent=circle,
    )
    LearningContentFactory(
        title="Luca macht sich fit im Verkauf",
        parent=circle,
    )
    LearningContentFactory(
        title="Fachcheck Beratung und Verkauf",
        parent=circle,
    )
    LearningSequenceFactory(
        title="Kompetenznachweis", parent=circle, icon="it-icon-ls-watch"
    )
    LearningUnitFactory(title="Sozialer Auftritt", parent=circle)
    LearningContentFactory(
        title="Mediathek",
        parent=circle,
    )
    LearningContentFactory(
        title="Lerninhalt offen",
        parent=circle,
    )
    LearningContentFactory(
        title="Fachcheck Sozialer Auftritt",
        parent=circle,
    )
    LearningSequenceFactory(
        title="Nachbearbeitung", parent=circle, icon="it-icon-ls-watch"
    )
    LearningUnitFactory(title="Sozialer Auftritt", parent=circle)
    LearningContentFactory(
        title="Mediathek",
        parent=circle,
    )
    LearningContentFactory(
        title="Lerninhalt offen",
        parent=circle,
    )
    LearningContentFactory(
        title="Fachcheck Sozialer Auftritt",
        parent=circle,
    )
    LearningSequenceFactory(title="Abschluss", parent=circle, icon="it-icon-ls-end")
    LearningUnitFactory(title="Circle beenden", parent=circle)
    create_learning_content_beenden(circle)
