-- 1. Aktive Kunden laden
SELECT *
FROM report_customer_config
WHERE active = TRUE
ORDER BY customer_id;

-- 2. Noch nicht erzeugte Reports eines Monats finden
SELECT c.*
FROM report_customer_config c
WHERE c.active = TRUE
  AND NOT EXISTS (
      SELECT 1
      FROM monthly_report_runs r
      WHERE r.customer_id = c.customer_id
        AND r.report_year = $1
        AND r.report_month = $2
        AND r.report_version = '1.0'
        AND r.status = 'completed'
  );

-- 3. Reportlauf reservieren
INSERT INTO monthly_report_runs (
    customer_id, report_year, report_month, status,
    report_version, prompt_version, template_version
)
VALUES ($1, $2, $3, 'processing', '1.0', '1.0', '1.0')
ON CONFLICT (customer_id, report_year, report_month, report_version)
DO UPDATE SET
    status = 'processing',
    error_message = NULL,
    started_at = NOW(),
    completed_at = NULL
RETURNING id;

-- 4. Erfolgreich abschliessen
UPDATE monthly_report_runs
SET status = 'completed',
    storage_path = $2,
    checksum_sha256 = $3,
    claude_model = $4,
    completed_at = NOW()
WHERE id = $1;

-- 5. Fehler protokollieren
UPDATE monthly_report_runs
SET status = 'failed',
    error_message = LEFT($2, 5000),
    completed_at = NOW()
WHERE id = $1;
