from __future__ import annotations
import json
import unittest
from pathlib import Path
from asw_component import execute

ROOT = Path(__file__).resolve().parents[1]

class ComponentTest(unittest.TestCase):
    def test_reference_scenario(self):
        payload = json.loads((ROOT / "examples/input.json").read_text(encoding="utf-8"))
        result = execute(payload)
        self.assertTrue(result["accepted"])
        self.assertEqual(result["component"], "metafarmers/fruit-work-target-perception")
        self.assertEqual(result["target"], "vpu")
        self.assertEqual(result["status"], "TARGETS_READY")
        self.assertEqual([item["id"] for item in result["candidates"]], ["tip-02", "fruit-17"])
        self.assertEqual(result["counts"], {"fruit": 1, "growth-tip": 1})
        self.assertEqual(result["rejected"], 1)

    def test_safety_or_failure_path(self):
        payload = json.loads((ROOT / "examples/failure-input.json").read_text(encoding="utf-8"))
        result = execute(payload)
        self.assertEqual(result["component"], "metafarmers/fruit-work-target-perception")
        self.assertFalse(result["accepted"])
        self.assertEqual(result["status"], "NO_TARGETS")
        self.assertEqual(result["candidates"], [])

if __name__ == "__main__":
    unittest.main()
