package httpserver

import (
	"net/http"

	"bit.admedia.com/scm/ad/adpilot-indexing-commit-intel.com/internal/store"
)

// AnalysisJobReader exposes analysis job debug lookups.
type AnalysisJobReader interface {
	GetJob(jobID string) (store.AnalysisJob, bool)
}

// DebugAPI wires REST debug/control-plane dependencies.
type DebugAPI struct {
	Jobs    AnalysisJobReader
	Results store.AnalysisResultReader
}

type errorResponse struct {
	Error   string `json:"error"`
	Message string `json:"message"`
}

func handleAnalysisJob(jobs AnalysisJobReader) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		jobID := r.PathValue("job_id")
		if jobID == "" {
			writeJSON(w, http.StatusNotFound, errorResponse{Error: "not_found", Message: "analysis job not found"})
			return
		}

		job, ok := jobs.GetJob(jobID)
		if !ok {
			writeJSON(w, http.StatusNotFound, errorResponse{Error: "not_found", Message: "analysis job not found"})
			return
		}

		writeJSON(w, http.StatusOK, job)
	}
}

func handleAnalysisResult(results store.AnalysisResultReader) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		analysisID := r.PathValue("analysis_id")
		if analysisID == "" {
			writeJSON(w, http.StatusNotFound, errorResponse{Error: "not_found", Message: "analysis result not found"})
			return
		}

		result, ok := results.GetResult(analysisID)
		if !ok {
			writeJSON(w, http.StatusNotFound, errorResponse{Error: "not_found", Message: "analysis result not found"})
			return
		}

		writeJSON(w, http.StatusOK, result)
	}
}
