package handlers

import (
	"encoding/json"
	"fmt"
	"net/http"
	"strconv"

	"furry-sos-backend/config"
)

// ======================================================
// GET USER STATS + ACTIVITIES
// GET /api/user/stats?user_id=X
// Header: X-User-ID
//
// ✅ รองรับทั้ง emergency_reports + deceased_reports
// ======================================================
func GetUserStats(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=utf-8")
	w.Header().Set("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0")

	// ==================================================
	// อ่าน user_id
	// ==================================================
	userIDStr := r.Header.Get("X-User-ID")
	if userIDStr == "" {
		userIDStr = r.URL.Query().Get("user_id")
	}

	userID, err := strconv.Atoi(userIDStr)
	if err != nil || userID <= 0 {
		w.WriteHeader(http.StatusUnauthorized)
		json.NewEncoder(w).Encode(map[string]interface{}{
			"success": false,
			"message": "ไม่พบ User ID",
		})
		return
	}

	fmt.Printf("========================================\n")
	fmt.Printf("📊 GET USER STATS + ACTIVITIES\n")
	fmt.Printf("user_id = %d\n", userID)
	fmt.Printf("========================================\n")

	// ==================================================
	// 1. STATS — นับจาก 2 ตาราง
	// ==================================================

	var (
		emergencyTotal      int
		emergencyCompleted  int
		emergencyInProgress int

		deceasedTotal      int
		deceasedCompleted  int
		deceasedInProgress int
	)

	// ---------- Emergency ----------
	config.DB.QueryRow(`
		SELECT COUNT(*) FROM emergency_reports WHERE user_id = ?
	`, userID).Scan(&emergencyTotal)

	config.DB.QueryRow(`
		SELECT COUNT(*) FROM emergency_reports
		WHERE user_id = ? AND status IN ('completed', 'collected')
	`, userID).Scan(&emergencyCompleted)

	config.DB.QueryRow(`
		SELECT COUNT(*) FROM emergency_reports
		WHERE user_id = ?
		  AND status IN ('pending', 'assigned', 'accepted', 'arriving', 'arrived', 'in_progress')
	`, userID).Scan(&emergencyInProgress)

	// ---------- Deceased ----------
	config.DB.QueryRow(`
		SELECT COUNT(*) FROM deceased_reports WHERE user_id = ?
	`, userID).Scan(&deceasedTotal)

	config.DB.QueryRow(`
		SELECT COUNT(*) FROM deceased_reports
		WHERE user_id = ? AND status IN ('completed', 'collected')
	`, userID).Scan(&deceasedCompleted)

	config.DB.QueryRow(`
		SELECT COUNT(*) FROM deceased_reports
		WHERE user_id = ?
		  AND status IN ('pending', 'assigned', 'accepted', 'arriving', 'arrived', 'in_progress')
	`, userID).Scan(&deceasedInProgress)

	// ---------- รวม ----------
	total := emergencyTotal + deceasedTotal
	completed := emergencyCompleted + deceasedCompleted
	inProgress := emergencyInProgress + deceasedInProgress

	fmt.Printf("📊 Emergency: total=%d completed=%d in_progress=%d\n",
		emergencyTotal, emergencyCompleted, emergencyInProgress)
	fmt.Printf("📊 Deceased:  total=%d completed=%d in_progress=%d\n",
		deceasedTotal, deceasedCompleted, deceasedInProgress)

	// ==================================================
	// 2. ACTIVITIES — 3 รายการล่าสุดจากทั้ง 2 ตาราง
	// ==================================================

	activities := []map[string]interface{}{}

	rows, err := config.DB.Query(`
		SELECT id, case_code, animal_type, title, status, created_at, report_type
		FROM (
			(
				SELECT
					report_id AS id,
					COALESCE(case_code, CONCAT('SOS-', report_id)) AS case_code,
					COALESCE(animal_type, 'สัตว์') AS animal_type,
					COALESCE(injury_type, 'เหตุฉุกเฉิน') AS title,
					COALESCE(status, 'pending') AS status,
					created_at,
					'emergency' AS report_type
				FROM emergency_reports
				WHERE user_id = ?
			)
			UNION ALL
			(
				SELECT
					report_id AS id,
					CONCAT('BR-', LPAD(report_id, 4, '0')) AS case_code,
					COALESCE(animal_type, 'สัตว์') AS animal_type,
					'ซากสัตว์' AS title,
					COALESCE(status, 'pending') AS status,
					created_at,
					'deceased' AS report_type
				FROM deceased_reports
				WHERE user_id = ?
			)
		) AS combined
		ORDER BY created_at DESC
		LIMIT 3
	`, userID, userID)

	if err != nil {
		fmt.Println("❌ Activities query error:", err)
		// ไม่ return ผิดพลาด เพราะ stats ยังใช้ได้
	} else {
		defer rows.Close()

		for rows.Next() {
			var (
				id         int
				caseCode   string
				animalType string
				title      string
				status     string
				createdAt  interface{}
				reportType string
			)

			err := rows.Scan(
				&id, &caseCode, &animalType,
				&title, &status, &createdAt, &reportType,
			)
			if err != nil {
				fmt.Println("❌ Scan activity error:", err)
				continue
			}

			activities = append(activities, map[string]interface{}{
				"id":          id,
				"case_code":   caseCode,
				"animal_type": animalType,
				"title":       title,
				"status":      status,
				"created_at":  createdAt,
				"report_type": reportType,
			})
		}
	}

	fmt.Printf("📋 Activities: %d รายการ\n", len(activities))

	// ==================================================
	// 3. RESPONSE
	// ==================================================

	json.NewEncoder(w).Encode(map[string]interface{}{
		"success": true,
		"user_id": userID,
		"stats": map[string]interface{}{
			"total":       total,
			"completed":   completed,
			"in_progress": inProgress,

			// ✅ แยก breakdown เผื่อ frontend อยากแสดง
			"breakdown": map[string]interface{}{
				"emergency": map[string]int{
					"total":       emergencyTotal,
					"completed":   emergencyCompleted,
					"in_progress": emergencyInProgress,
				},
				"deceased": map[string]int{
					"total":       deceasedTotal,
					"completed":   deceasedCompleted,
					"in_progress": deceasedInProgress,
				},
			},
		},
		"activities": activities,
	})
}