"""WS2 defect #22 — jobs-created KPI rendered on the SME-Hub portfolio and the
SME-Hub indicator dashboard (MEI013).
"""
from __future__ import annotations

import pytest
from django.contrib.auth import get_user_model
from django.urls import reverse

from apps.core.permissions.roles import UserRole
from apps.mel.tracking.models import EmploymentSnapshot, SMEHubTrackingRecord
from apps.mel.tracking.services_dashboard import smehub_metrics_overview
from apps.smehub.onboarding.models import Business, BusinessStage, EntrepreneurProfile

User = get_user_model()
pytestmark = pytest.mark.django_db


@pytest.fixture
def admin():
    return User.objects.create_user(
        email="ws2j-adm@example.com", password="x",
        is_superuser=True, is_staff=True, role=UserRole.SYSTEM_ADMIN,
    )


@pytest.fixture
def record_with_jobs(admin):
    user = User.objects.create_user(email="ws2j-e@example.com", password="x", role=UserRole.ENTREPRENEUR)
    profile = EntrepreneurProfile.objects.create(user=user, country="UG", organisation="Co")
    profile.verify(by_user=admin)
    profile.save()
    biz = Business.objects.create(
        entrepreneur=profile, name="Agri Co", sector="Agriculture",
        business_stage=BusinessStage.MVP, country="UG",
    )
    biz.verify(by_user=admin)
    biz.save()
    record = SMEHubTrackingRecord.objects.create(entrepreneur=profile, business=biz)
    # No baseline snapshot → jobs_created == total headcount (8 + 7 = 15).
    EmploymentSnapshot.objects.create(tracking_record=record, fte_count=8, pte_count=7)
    return record


def test_overview_includes_jobs_created(record_with_jobs):
    overview = smehub_metrics_overview()
    assert overview["jobs_created"] == 15


def test_portfolio_page_shows_jobs_tile(client, admin, record_with_jobs):
    client.force_login(admin)
    resp = client.get(reverse("mel_tracking:smehub_portfolio"))
    assert resp.status_code == 200
    assert b"Jobs created" in resp.content
    assert resp.context["stats"]["jobs_created"] == 15
    assert b"15" in resp.content


def test_indicator_dashboard_shows_jobs_tile(client, admin, record_with_jobs):
    client.force_login(admin)
    resp = client.get(reverse("mel_tracking:smehub_indicator_dashboard"))
    assert resp.status_code == 200
    assert b"Jobs created" in resp.content
    assert resp.context["overview"]["jobs_created"] == 15
