"""
Fieldkit blueprint — killswitch, dead man's switch, status dashboard.
"""

from auth import admin_required, get_username, login_required
from flask import Blueprint, flash, redirect, render_template, request, url_for

from soosef.audit import log_action

bp = Blueprint("fieldkit", __name__, url_prefix="/fieldkit")


@bp.route("/")
@login_required
def status():
    """Fieldkit status dashboard — all monitors and system health."""
    from soosef.fieldkit.deadman import DeadmanSwitch

    deadman = DeadmanSwitch()
    return render_template(
        "fieldkit/status.html",
        deadman_status=deadman.status(),
    )


@bp.route("/killswitch", methods=["GET", "POST"])
@admin_required
def killswitch():
    """Killswitch arming and firing UI."""
    if request.method == "POST":
        action = request.form.get("action")
        if action == "fire" and request.form.get("confirm") == "CONFIRM-PURGE":
            # Require password re-authentication for killswitch
            from auth import verify_user_password

            password = request.form.get("password", "")
            username = get_username()
            if not verify_user_password(username, password):
                flash("Killswitch requires password confirmation.", "danger")
                return render_template("fieldkit/killswitch.html")

            from soosef.fieldkit.killswitch import PurgeScope, execute_purge

            actor = username
            result = execute_purge(PurgeScope.ALL, reason="web_ui")
            outcome = "success" if result.fully_purged else "failure"
            failed_steps = ", ".join(name for name, _ in result.steps_failed)
            log_action(
                actor=actor,
                action="killswitch.fire",
                target="all",
                outcome=outcome,
                source="web",
                detail=(
                    f"steps_completed={len(result.steps_completed)} "
                    f"steps_failed={len(result.steps_failed)}"
                    + (f" failed={failed_steps}" if failed_steps else "")
                ),
            )
            flash(
                f"Purge executed: {len(result.steps_completed)} steps completed, "
                f"{len(result.steps_failed)} failed",
                "warning" if result.steps_failed else "success",
            )
            return redirect(url_for("fieldkit.status"))

    return render_template("fieldkit/killswitch.html")


@bp.route("/deadman/checkin", methods=["POST"])
@login_required
def deadman_checkin():
    """Record a dead man's switch check-in."""
    from soosef.fieldkit.deadman import DeadmanSwitch

    deadman = DeadmanSwitch()
    deadman.checkin()
    flash("Check-in recorded.", "success")
    return redirect(url_for("fieldkit.status"))
