-- Sync task.status to DONE wanneer een ClaudeJob afgerond wordt.
--
-- Wanneer de agent (via MCP `update_job_status('done')` of een Server
-- Action) een ClaudeJob op DONE zet, willen we dat de bijbehorende
-- Task automatisch óók op DONE komt. Anders blijft de kaart in de
-- "Te doen"-kolom staan terwijl de job-badge "Klaar" toont.
--
-- We doen dit op DB-niveau zodat het werkt ongeacht welke client de
-- update doet (MCP-server, Server Action, raw SQL). De bestaande
-- notify_task_change-trigger vuurt automatisch op de task-UPDATE en
-- stuurt de pg_notify naar /api/realtime/solo, dus de UI synct
-- zonder extra plumbing.
--
-- Idempotent: WHERE-clause voorkomt no-op updates die de task-trigger
-- onnodig doen vuren.

CREATE OR REPLACE FUNCTION sync_task_status_from_claude_job() RETURNS trigger AS $$
BEGIN
  IF NEW.status = 'DONE' THEN
    IF (TG_OP = 'INSERT')
       OR (TG_OP = 'UPDATE' AND OLD.status IS DISTINCT FROM 'DONE')
    THEN
      UPDATE tasks
        SET status = 'DONE', updated_at = now()
        WHERE id = NEW.task_id AND status <> 'DONE';
    END IF;
  END IF;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

DROP TRIGGER IF EXISTS claude_job_status_to_task ON claude_jobs;
CREATE TRIGGER claude_job_status_to_task
AFTER INSERT OR UPDATE OF status ON claude_jobs
FOR EACH ROW
EXECUTE FUNCTION sync_task_status_from_claude_job();
