import pytest
from unittest.mock import AsyncMock, MagicMock
from app.services.rekonsiliasi_service import _get_anchor_shift


@pytest.mark.asyncio
async def test_get_anchor_shift_returns_configured_shift():
    """When rekonsiliasi_shift_id is set, returns that shift."""
    configured_shift = MagicMock(id=3, nama="Shift 3", jam_mulai="22:00")
    spbu = MagicMock(
        rekonsiliasi_shift_id=3,
        rekonsiliasi_shift=configured_shift,
    )
    db = AsyncMock()
    db.get = AsyncMock(return_value=spbu)

    result = await _get_anchor_shift(db, spbu_id=1, shifts_ordered=[
        MagicMock(id=1, nama="Shift 1"),
        MagicMock(id=2, nama="Shift 2"),
        configured_shift,
    ])

    assert result.id == 3


@pytest.mark.asyncio
async def test_get_anchor_shift_falls_back_to_last():
    """When rekonsiliasi_shift_id is None, returns last shift."""
    s1 = MagicMock(id=1, nama="Shift 1")
    s2 = MagicMock(id=2, nama="Shift 2")
    s3 = MagicMock(id=3, nama="Shift 3")
    spbu = MagicMock(rekonsiliasi_shift_id=None, rekonsiliasi_shift=None)
    db = AsyncMock()
    db.get = AsyncMock(return_value=spbu)

    result = await _get_anchor_shift(db, spbu_id=1, shifts_ordered=[s1, s2, s3])

    assert result.id == 3
