"""Tests for OCR endpoints."""

import sys, os
sys.path.insert(0, os.path.dirname(__file__))

import pytest
import pytest_asyncio
from httpx import AsyncClient
from helpers import auth_header, register_and_login


@pytest.mark.asyncio
async def test_submit_ocr_job(client: AsyncClient):
    token, _ = await register_and_login(client)
    resp = await client.post(
        "/api/ocr/process",
        json={"note_id": "note-ocr-1", "document_id": None, "page_number": None},
        headers=auth_header(token),
    )
    assert resp.status_code == 201
    data = resp.json()
    assert "job_id" in data


@pytest.mark.asyncio
async def test_get_job_status(client: AsyncClient):
    token, _ = await register_and_login(client)
    resp = await client.post(
        "/api/ocr/process",
        json={"note_id": "note-ocr-2", "document_id": None, "page_number": None},
        headers=auth_header(token),
    )
    job_id = resp.json()["job_id"]

    resp = await client.get(f"/api/ocr/status/{job_id}", headers=auth_header(token))
    assert resp.status_code == 200
    data = resp.json()
    assert data["id"] == job_id
    assert data["status"] == "pending"


@pytest.mark.asyncio
async def test_get_job_status_not_found(client: AsyncClient):
    token, _ = await register_and_login(client)
    resp = await client.get("/api/ocr/status/nonexistent", headers=auth_header(token))
    assert resp.status_code == 404


@pytest.mark.asyncio
async def test_get_ocr_results_empty(client: AsyncClient):
    token, _ = await register_and_login(client)
    resp = await client.get("/api/ocr/results/note-no-jobs", headers=auth_header(token))
    assert resp.status_code == 200
    assert resp.json() == []


@pytest.mark.asyncio
async def test_get_ocr_results_with_jobs(client: AsyncClient):
    token, _ = await register_and_login(client)
    await client.post(
        "/api/ocr/process",
        json={"note_id": "note-ocr-3", "document_id": None, "page_number": None},
        headers=auth_header(token),
    )
    await client.post(
        "/api/ocr/process",
        json={"note_id": "note-ocr-3", "document_id": None, "page_number": None},
        headers=auth_header(token),
    )

    resp = await client.get("/api/ocr/results/note-ocr-3", headers=auth_header(token))
    assert resp.status_code == 200
    assert len(resp.json()) == 2


@pytest.mark.asyncio
async def test_ocr_requires_auth(client: AsyncClient):
    resp = await client.post(
        "/api/ocr/process",
        json={"note_id": "x", "document_id": None, "page_number": None},
    )
    assert resp.status_code in (401, 403)
