# decide_search.py — ใบงานเสริม 4.3F ระดับ 2: หมุนค้นหาเมื่อไม่พบเป้าหมาย (state machine)
# ตรรกะจำลอง ไม่มีคำสั่งควบคุมฮาร์ดแวร์
# สถานะ: TRACK (ติดตาม) -> COAST (ใบหน้าหายไม่เกิน 0.5 s) -> SEARCH (หมุนหา ไม่เกิน 6 s) -> STOP

TRACKING_TIMEOUT = 0.5
SEARCH_TIME = 6.0
SEARCH_SPEED = 0.2


def next_state(found, seconds_since_seen):
    if found:
        return "TRACK"
    if seconds_since_seen < TRACKING_TIMEOUT:
        return "COAST"
    if seconds_since_seen < TRACKING_TIMEOUT + SEARCH_TIME:
        return "SEARCH"
    return "STOP"


def action(state, turn):
    """คืนค่า turn ที่จะใช้จริงในแต่ละสถานะ"""
    if state in ("TRACK", "COAST"):
        return turn
    if state == "SEARCH":
        return SEARCH_SPEED
    return 0.0


test_cases = [
    (True, 0.0, "TRACK"),
    (False, 0.3, "COAST"),
    (False, 2.0, "SEARCH"),
    (False, 10.0, "STOP"),
]
for found, since, expected in test_cases:
    state = next_state(found, since)
    assert state == expected, (found, since, state)
    print(found, since, state, action(state, 0.1))

# ต่อยอด: ใน main.py ตั้ง SEARCH_WHEN_LOST = True เพื่อใช้โหมดค้นหาที่มีอยู่แล้ว
# หรือนำ next_state() ไปใช้เพื่อเพิ่มการหยุดเมื่อค้นหานานเกินไป
