package winapi

import (
	"bytes"
	"os/exec"
	"strings"
	"syscall"
)

// WifiConnection — SSID + BSSID (MAC) của điểm phát đang kết nối
type WifiConnection struct {
	SSID  string
	BSSID string
}

// GetWifiSSID trả về SSID Wifi đang kết nối
func GetWifiSSID() string {
	return GetWifiConnection().SSID
}

// GetWifiConnection đọc SSID và BSSID từ netsh (Windows)
func GetWifiConnection() WifiConnection {
	cmd := exec.Command("netsh", "wlan", "show", "interfaces")
	cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}

	var out bytes.Buffer
	cmd.Stdout = &out
	if err := cmd.Run(); err != nil {
		return WifiConnection{}
	}

	var conn WifiConnection
	for _, line := range strings.Split(out.String(), "\n") {
		trimmed := strings.TrimSpace(line)
		lower := strings.ToLower(trimmed)
		if strings.HasPrefix(lower, "ssid") && !strings.Contains(lower, "bssid") {
			if v := valueAfterColon(trimmed); v != "" {
				conn.SSID = v
			}
		}
		// Windows: "AP BSSID" (EN) hoặc dòng có chứa "bssid" (locale khác)
		if strings.Contains(lower, "bssid") {
			if v := valueAfterColon(trimmed); v != "" {
				conn.BSSID = normalizeMAC(v)
			}
		}
	}
	return conn
}

func valueAfterColon(line string) string {
	idx := strings.Index(line, ":")
	if idx < 0 {
		return ""
	}
	return strings.TrimSpace(line[idx+1:])
}

func normalizeMAC(mac string) string {
	var hex []rune
	for _, c := range strings.ToLower(mac) {
		if (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') {
			hex = append(hex, c)
		}
	}
	if len(hex) != 12 {
		return strings.TrimSpace(mac)
	}
	return string(hex[0:2]) + ":" + string(hex[2:4]) + ":" + string(hex[4:6]) + ":" +
		string(hex[6:8]) + ":" + string(hex[8:10]) + ":" + string(hex[10:12])
}

// BSSIDKey chuẩn hóa MAC để so khớp (12 ký tự hex)
func BSSIDKey(bssid string) string {
	var hex []rune
	for _, c := range strings.ToLower(bssid) {
		if (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') {
			hex = append(hex, c)
		}
	}
	return string(hex)
}
