package handlers

import (
	"net/http"

	"github.com/breakpilot/ai-compliance-sdk/internal/iace"
	"github.com/gin-gonic/gin"
	"github.com/google/uuid"
)

// GetRiskSuggestion returns BreakPilot's justified dual-model risk suggestion
// for a hazard: the EN-62061-style F/W/P/S model and the Fine-Kinney P/E/C
// model, each with suggested values, justifications and the visible formula.
// Read-only and computed from public-data anchors — the professional adjusts
// the values; no norm table is stored or reproduced.
//
// GET /projects/:id/hazards/:hid/risk-suggestion
func (h *IACEHandler) GetRiskSuggestion(c *gin.Context) {
	hid, err := uuid.Parse(c.Param("hid"))
	if err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": "invalid hazard ID"})
		return
	}
	hz, err := h.store.GetHazard(c.Request.Context(), hid)
	if err != nil || hz == nil {
		c.JSON(http.StatusNotFound, gin.H{"error": "hazard not found"})
		return
	}
	c.JSON(http.StatusOK, iace.BuildRiskSuggestion(hz))
}

// GetRiskMatrix handles GET /projects/:id/risk-matrix.
// Project-wide confidence-aware risk view computed on read from each hazard (no
// persistence): per-hazard risk list + a Severity×Probability aggregation grid.
// Uses the same model as the GT benchmark, so matrix numbers match the
// comparison. Lets a customer see risk for EVERY project, not only GT ones.
func (h *IACEHandler) GetRiskMatrix(c *gin.Context) {
	projectID, err := uuid.Parse(c.Param("id"))
	if err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": "invalid project ID"})
		return
	}
	hazards, err := h.store.ListHazards(c.Request.Context(), projectID)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}
	c.JSON(http.StatusOK, iace.BuildRiskMatrix(hazards))
}

// GetRiskDataSources handles GET /risk-data-sources.
// Returns the license-tagged public-statistics evidence register (Eurostat ESAW,
// CC BY 4.0) that anchors the risk-frequency tiers, plus the overall attribution
// note — so an auditor can see WHERE the risk numbers come from.
func (h *IACEHandler) GetRiskDataSources(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"note":     iace.RiskDataSourcesNote,
		"evidence": iace.AllRiskEvidence(),
	})
}

// GetArchitecture handles GET /architecture.
// Data-driven self-description of the IACE engine (pipeline stages, libraries
// with LIVE counts, data sources + licenses, norm-matching logic) for the
// "Architektur & Datenfluss" auditability tab.
func (h *IACEHandler) GetArchitecture(c *gin.Context) {
	c.JSON(http.StatusOK, iace.BuildArchitecture())
}
