"""موديول مثال: كشف/عدّ الأسماك — يُرفع من اللوحة، يُوقّع، ثم OTA للجهاز.
يُنبّه عند انخفاض العدد (نفوق/تجمّع غير طبيعي). نموذج YOLOv8-ONNX (أصنافه في metadata)."""
from vde.api import Detection, Detector


class FishCount(Detector):
    key = "fish_count"
    kind = "edge_model"
    triggers = ["motion"]          # يُشغَّل عند حركة في كاميرا الحوض (أو ["stream"] للمتّصل)

    def setup(self, ctx):
        self.det = ctx.onnx()                          # OnnxDetector مشترك
        self.min_count = int(ctx.config.get("min_count", 20))

    def on_event(self, ev, ctx):
        snap = ctx.snapshot(ev.get("camera"))
        if not snap:
            return None
        fish = [h for h in self.det.detect(snap, conf=0.35) if h[0] == "fish"]
        if len(fish) < self.min_count:
            return Detection(flagged=True, score=len(fish), label="fish_count",
                             note=f"عدد الأسماك {len(fish)} < الحد {self.min_count}",
                             snapshot=snap)
        return None
