package main

import (
	"encoding/json"
	"fmt"
	"io"
	"net/http"
)

type Response struct {
	Request struct {
		Operation string `json:"operation"`
		IP        string `json:"ip"`
	} `json:"request"`
	Reply struct {
		Code     int    `json:"code"`
		Detail   string `json:"detail"`
		RecordID string `json:"record_id"`
	} `json:"reply"`
}

// PerformDNSUpdate 使用 Namesilo API 更新指定域名的 DNS 记录
func PerformDNSUpdate(key string, domain string, rrid string, rrhost string, rrvalue string) (*Response, error) {
	url := fmt.Sprintf("https://www.namesilo.com/api/dnsUpdateRecord?version=1&type=json&key=%s&domain=%s&rrid=%s&rrhost=%s&rrvalue=%s&rrttl=3600", key, domain, rrid, rrhost, rrvalue)

	resp, err := http.Get(url)
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()

	body, err := io.ReadAll(resp.Body)
	if err != nil {
		return nil, err
	}

	var apiResponse Response
	if err := json.Unmarshal(body, &apiResponse); err != nil {
		return nil, err
	}

	return &apiResponse, nil
}

// ProcessDNSUpdateForDomain 处理指定域名的 DNS 记录更新，并返回操作状态码
func ProcessDNSUpdateForDomain(key string, Domain string, rrid string, rrhost string, rrvalue string) int {
	// 更新DNS
	response, err := PerformDNSUpdate(key, Domain, rrid, rrhost, rrvalue)
	if err != nil {
		fmt.Println("获取 DNS 记录失败:", err)
		return 1
	}

	// 打印完整 JSON 数据
	responseJson, err := json.MarshalIndent(response, "", "  ")
	if err != nil {
		fmt.Println("JSON 格式化失败:", err)
		return 1
	}
	fmt.Println(string(responseJson))

	// 判断 Code 字段是否表示成功
	if response.Reply.Code == 300 {
		fmt.Println("DNS 记录更新成功!")
		return 0
	} else {
		fmt.Println("DNS 记录更新失败，错误代码:", response.Reply.Code)
	}

	return 1
}
