package handlers

import (
	"encoding/json"
	"furry-sos-backend/config"
	"net/http"
)

type SOSRequest struct {
	UserID    int     `json:"user_id"`
	Latitude  float64 `json:"latitude"`
	Longitude float64 `json:"longitude"`
}

func SOSHandler(w http.ResponseWriter, r *http.Request) {
	if r.Method != http.MethodPost {
		http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
		return
	}

	var req SOSRequest
	err := json.NewDecoder(r.Body).Decode(&req)
	if err != nil {
		http.Error(w, "Invalid request body", http.StatusBadRequest)
		return
	}

	// สร้างตาราง sos_calls ถ้ายังไม่มี
	createTableQuery := `CREATE TABLE IF NOT EXISTS sos_calls (
		sos_id INT PRIMARY KEY AUTO_INCREMENT,
		user_id INT NOT NULL,
		gps_lat DECIMAL(10,8) NOT NULL,
		gps_lng DECIMAL(11,8) NOT NULL,
		created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
	)`
	config.DB.Exec(createTableQuery)

	query := `INSERT INTO sos_calls (user_id, gps_lat, gps_lng) VALUES (?, ?, ?)`
	result, err := config.DB.Exec(query, req.UserID, req.Latitude, req.Longitude)
	if err != nil {
		http.Error(w, "ส่ง SOS ไม่สำเร็จ: "+err.Error(), http.StatusInternalServerError)
		return
	}

	sosID, _ := result.LastInsertId()

	volunteers, _ := findNearbyVolunteers()

	w.Header().Set("Content-Type", "application/json")
	json.NewEncoder(w).Encode(map[string]interface{}{
		"message":    "🚨 ส่ง SOS สำเร็จ!",
		"sos_id":     sosID,
		"volunteers": volunteers,
	})
}

func findNearbyVolunteers() ([]map[string]interface{}, error) {
	query := `SELECT v.volunteer_id, u.full_name, u.phone 
	          FROM volunteers v 
	          JOIN users u ON v.user_id = u.user_id 
	          WHERE v.is_approved = TRUE AND v.is_online = TRUE 
	          LIMIT 5`

	rows, err := config.DB.Query(query)
	if err != nil {
		return nil, err
	}
	defer rows.Close()

	var volunteers []map[string]interface{}
	for rows.Next() {
		var id int
		var name, phone string
		err := rows.Scan(&id, &name, &phone)
		if err != nil {
			continue
		}
		volunteers = append(volunteers, map[string]interface{}{
			"volunteer_id": id,
			"full_name":    name,
			"phone":        phone,
		})
	}
	return volunteers, nil
}
