package handler

import (
	"context"
	"encoding/json"
	"fmt"
	"net/http"
	"wnzl-snow/internal/report"
)

func (h *Handler) InventoryReportDownload(w http.ResponseWriter, r *http.Request) {

	ctx := context.Background()

	// Generate the XLSX report
	reportData, err := report.CreateInventoryReport(h.Logger, h.Database, ctx)
	if err != nil {
		h.Logger.Error("Failed to create report", "error", err)
		w.Header().Set("Content-Type", "application/json")
		w.WriteHeader(http.StatusInternalServerError)
		json.NewEncoder(w).Encode(map[string]string{
			"status":  "ERROR",
			"message": fmt.Sprintf("Unable to create xlsx report: '%s'", err),
		})
		return
	}

	// Set HTTP headers to indicate file download
	w.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
	w.Header().Set("Content-Disposition", `attachment; filename="inventory_report.xlsx"`)
	w.Header().Set("File-Name", "inventory_report.xlsx")

	// Write the XLSX file to the HTTP response
	w.Write(reportData)
}

func (h *Handler) UpdateReportDownload(w http.ResponseWriter, r *http.Request) {

	ctx := context.Background()

	// Generate the XLSX report
	reportData, err := report.CreateUpdatesReport(h.Logger, h.Database, ctx)
	if err != nil {
		h.Logger.Error("Failed to create report", "error", err)
		w.Header().Set("Content-Type", "application/json")
		w.WriteHeader(http.StatusInternalServerError)
		json.NewEncoder(w).Encode(map[string]string{
			"status":  "ERROR",
			"message": fmt.Sprintf("Unable to create xlsx report: '%s'", err),
		})
		return
	}

	// Set HTTP headers to indicate file download
	w.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
	w.Header().Set("Content-Disposition", `attachment; filename="updates_report.xlsx"`)
	w.Header().Set("File-Name", "updates_report.xlsx")

	// Write the XLSX file to the HTTP response
	w.Write(reportData)
}
