package handlers

import (
	"encoding/json"
	"net/http"
	"report_go/internal/db"
)

type CaseTypeChart struct {
	Service string `json:"service"`
	Total   int64  `json:"total"`
}

type CaseTimeChart struct {
	Period string `json:"period"`
	Total  int64  `json:"total"`
}

func CaseChartHandler(w http.ResponseWriter, r *http.Request) {

	dateFrom := r.URL.Query().Get("date_from")
	dateTo := r.URL.Query().Get("date_to")

	conn := db.GetDB()

	// chart type
	rows1, _ := conn.Query(`
	SELECT case_service_code, COUNT(*) 
	FROM service_cases
	WHERE reported_at BETWEEN ? AND ?
	GROUP BY case_service_code
	`, dateFrom, dateTo)

	var typeData []CaseTypeChart

	for rows1.Next() {
		var r CaseTypeChart
		rows1.Scan(&r.Service, &r.Total)
		typeData = append(typeData, r)
	}

	// chart time
	rows2, _ := conn.Query(`
	SELECT 
	CASE
	WHEN TIME(reported_at) BETWEEN '08:00:00' AND '17:59:59' THEN '08:00-17:59'
	WHEN TIME(reported_at) BETWEEN '18:00:00' AND '23:59:59' THEN '18:00-23:59'
	ELSE '00:00-07:59'
	END as period,
	COUNT(*)
	FROM service_cases
	WHERE reported_at BETWEEN ? AND ?
	GROUP BY period
	`, dateFrom, dateTo)

	var timeData []CaseTimeChart

	for rows2.Next() {
		var r CaseTimeChart
		rows2.Scan(&r.Period, &r.Total)
		timeData = append(timeData, r)
	}

	resp := map[string]interface{}{
		"type_chart": typeData,
		"time_chart": timeData,
	}

	json.NewEncoder(w).Encode(resp)
}