package main

import (
	"bufio"
	"encoding/json"
	"fmt"
	"net/http"
	"os"
	"strings"
)

func main() {
	url := "https://publicsuffix.org/list/public_suffix_list.dat"
	err := downloadAndParseTLDs(url, "tld.json")
	if err != nil {
		fmt.Println("Error:", err)
	}
}

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

	tlds := make(map[string]bool)

	scanner := bufio.NewScanner(resp.Body)
	for scanner.Scan() {
		line := strings.TrimSpace(scanner.Text())
		if strings.HasPrefix(line, "//") || line == "" {
			continue
		}
		tlds[line] = true
	}

	if err := scanner.Err(); err != nil {
		return err
	}

	jsonData, err := json.MarshalIndent(tlds, "", "    ")
	if err != nil {
		return err
	}

	outputFile, err := os.Create(outputFilename)
	if err != nil {
		return err
	}
	defer outputFile.Close()

	_, err = outputFile.Write(jsonData)
	if err != nil {
		return err
	}

	fmt.Println("TLDs successfully downloaded and saved to", outputFilename)
	return nil
}