# retoor <retoor@molodetz.nl>

import json
from tests.conftest import BASE_URL
from devplacepy.database import get_table
from devplacepy.services.jobs import queue
def _seed_job(uid="test-fork-uid-001"):
    jobs = get_table("jobs")
    jobs.upsert(
        {
            "uid": uid,
            "kind": "fork",
            "status": "done",
            "payload": json.dumps(
                {"source_project_uid": "src-001", "title": "Test Fork"}
            ),
            "result": json.dumps(
                {
                    "project_uid": "forked-project-001",
                    "project_url": "/projects/forked-project-001",
                    "source_project_uid": "src-001",
                }
            ),
            "preferred_name": "Test Fork",
            "item_count": 3,
            "owner_kind": "user",
            "owner_uid": "test-owner-001",
            "error": None,
            "created_at": "2026-06-12T00:00:00+00:00",
            "completed_at": "2026-06-12T00:05:00+00:00",
        },
        ["uid"],
    )
    return uid


def test_fork_status_returns_job_details(page, app_server):
    uid = _seed_job()
    resp = page.request.get(f"{BASE_URL}/forks/{uid}")
    assert resp.status == 200
    data = resp.json()
    assert data["uid"] == uid
    assert data["kind"] == "fork"
    assert data["status"] == "done"
    assert data["project_uid"] == "forked-project-001"
    assert data["project_url"] == "/projects/forked-project-001"
    assert data["source_project_uid"] == "src-001"
    assert data["item_count"] == 3
    assert data["preferred_name"] == "Test Fork"
    assert data["error"] is None
    assert data["created_at"] is not None
    assert data["completed_at"] is not None


def test_fork_status_unknown_returns_404(page, app_server):
    resp = page.request.get(f"{BASE_URL}/forks/nonexistent-uid")
    assert resp.status == 404


def test_fork_status_non_fork_kind_returns_404(page, app_server):
    jobs = get_table("jobs")
    jobs.upsert(
        {
            "uid": "non-fork-uid",
            "kind": "zip",
            "status": "pending",
            "payload": json.dumps({}),
        },
        ["uid"],
    )
    resp = page.request.get(f"{BASE_URL}/forks/non-fork-uid")
    assert resp.status == 404


def test_fork_status_pending_shows_no_project_fields(page, app_server):
    uid = "pending-fork-001"
    jobs = get_table("jobs")
    jobs.upsert(
        {
            "uid": uid,
            "kind": "fork",
            "status": "pending",
            "payload": json.dumps(
                {"source_project_uid": "src-002", "title": "Pending Fork"}
            ),
            "preferred_name": "Pending Fork",
            "item_count": 0,
            "created_at": "2026-06-12T00:00:00+00:00",
        },
        ["uid"],
    )
    resp = page.request.get(f"{BASE_URL}/forks/{uid}")
    assert resp.status == 200
    data = resp.json()
    assert data["uid"] == uid
    assert data["status"] == "pending"
    assert data["project_uid"] is None
    assert data["project_url"] is None
    assert data["completed_at"] is None
