#!/bin/bash
# pm-poll-loop - Continuous PM polling daemon
# Continuously polls queue and assigns work to dev agents

set -euo pipefail

QUEUE_FILE="$HOME/.kugetsu/queue.json"
LOCK_FILE="$HOME/.kugetsu/.pm-poll.lock"
PID_FILE="$HOME/.kugetsu/.pm-poll.pid"
POLL_INTERVAL="${POLL_INTERVAL:-600}"  # 10 minutes default
VERBOSITY="${KUGETSU_VERBOSITY:-total}"

log() {
    if [ "$VERBOSITY" = "verbose" ]; then
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >&2
    fi
}

acquire_lock() {
    local my_pid=$$
    if [ -f "$PID_FILE" ]; then
        local old_pid=$(cat "$PID_FILE" 2>/dev/null)
        if [ -n "$old_pid" ] && kill -0 "$old_pid" 2>/dev/null; then
            echo "Error: PM poll loop already running (PID: $old_pid)" >&2
            exit 1
        fi
    fi
    echo "$my_pid" > "$PID_FILE"
    log "PM poll loop started (PID: $my_pid)"
}

release_lock() {
    rm -f "$PID_FILE"
    log "PM poll loop stopped"
}

cleanup() {
    release_lock
    exit 0
}

trap cleanup EXIT INT TERM

acquire_lock

while true; do
    # Try to dequeue from highest priority tier
    result=$(~/.kugetsu/scripts/dequeue 2>/dev/null || true)
    
    if [ -n "$result" ] && [ "$result" != "Queue empty" ]; then
        tier=$(echo "$result" | cut -d'|' -f1)
        task_id=$(echo "$result" | cut -d'|' -f2)
        message=$(echo "$result" | cut -d'|' -f3-)
        
        log "Dequeued: [$tier] $message"
        
        # Extract issue ref if present, otherwise use generic
        if [[ "$message" =~ (github\.com/[^/]+/[^/]+#[0-9]+) ]]; then
            issue_ref="${BASH_REMATCH[1]}"
            kugetsu start "$issue_ref" "$message"
        else
            # Use a generic issue if none specified
            echo "Warning: No issue ref in message, skipping: $message" >&2
        fi
        
        log "Assigned task: $task_id"
    else
        log "Queue empty, waiting ${POLL_INTERVAL}s..."
    fi
    
    sleep "$POLL_INTERVAL"
done