#!/bin/bash
# Cron quality gate for CyberBrain26-v4
# Runs every 13 minutes, writes VERDICT to .kilo/logs/cron_reviews.log
# Auto-approved implementation per plan 1792576924213-cron-quality-gate-implementation.md

set -euo pipefail

PROJECT_DIR="/home/oem/CyberBrain26-v4"
LOG_FILE="$PROJECT_DIR/.kilo/logs/cron_reviews.log"
TIMESTAMP=$(date +"%Y-%m-%dT%H:%M:%S")

mkdir -p "$(dirname "$LOG_FILE")"

# Append header block
echo "=== 2026-$TIMESTAMP ===" >> "$LOG_FILE"
echo "VERDICT: RUNNING gates" >> "$LOG_FILE"
echo "Gates: ruff starting at $TIMESTAMP" >> "$LOG_FILE"

RUN_ERRORS=0
cd "$PROJECT_DIR"

# Gate 1a: Ruff linting
if ruff check . --output-format=grouped >> "$LOG_FILE" 2>&1; then
    echo "VERDICT: GATE_1_PASS ruff" >> "$LOG_FILE"
else
    echo "VERDICT: GATE_1_FAIL ruff" >> "$LOG_FILE"
    RUN_ERRORS=$((RUN_ERRORS + 1))
fi

# Gate 1b: Ruff formatting
if ruff format --check . >> "$LOG_FILE" 2>&1; then
    echo "VERDICT: GATE_1_PASS ruff_format" >> "$LOG_FILE"
else
    echo "VERDICT: GATE_1_FAIL ruff_format" >> "$LOG_FILE"
    RUN_ERRORS=$((RUN_ERRORS + 1))
fi

# Gate 2: Mypy type checking
echo "Gates: mypy starting at $TIMESTAMP" >> "$LOG_FILE"
if python3 -m mypy src/cyberbrain26 --ignore-missing-imports --show-error-codes >> "$LOG_FILE" 2>&1; then
    echo "VERDICT: GATE_2_PASS mypy" >> "$LOG_FILE"
else
    echo "VERDICT: GATE_2_FAIL mypy" >> "$LOG_FILE"
    RUN_ERRORS=$((RUN_ERRORS + 1))
fi

# Gate 3: Pytest with coverage floor
echo "Gates: pytest starting at $TIMESTAMP" >> "$LOG_FILE"
TEST_RESULT=$(python3 -m pytest -q --cov=src --cov-report=term-missing --cov-fail-under=60 2>&1 || true)
echo "$TEST_RESULT" | tail -5 >> "$LOG_FILE"
if echo "$TEST_RESULT" | grep -qE "^[0-9]+ passed"; then
    echo "VERDICT: GATE_3_PASS pytest" >> "$LOG_FILE"
else
    echo "VERDICT: GATE_3_FAIL pytest" >> "$LOG_FILE"
    RUN_ERRORS=$((RUN_ERRORS + 1))
fi

# Final verdict
if [ $RUN_ERRORS -eq 0 ]; then
    echo "VERDICT: ALL_GREEN gates pass" >> "$LOG_FILE"
else
    echo "VERDICT: ESCALATE $RUN_ERRORS errors detected" >> "$LOG_FILE"
fi

exit 0