package main

import (
	"encoding/csv"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"sync"

	"github.com/gocarina/gocsv"
)

type (
	SkillsOld struct {
		IDHabilidade int    `csv:"id_habilidade"`
		IDUsuario    int    `csv:"id_usuario"`
		DSHabilidade string `csv:"ds_habilidade"`
	}
	Skills struct {
		IDHabilidade int    `csv:"id_habilidade"`
		CandidateID  int    `csv:"candidate_id"`
		Name         string `csv:"name"`
	}
)

func ExecSkills(wg *sync.WaitGroup) {
	defer wg.Done()

	records := extractSkillsOld()
	createSkillsCsv(records)
}

func extractSkillsOld() []SkillsOld {
	fmt.Println(Yellow + "Extracting skills" + Reset)
	csvFile, err := os.Open("files/TB_SOPA_BC_HABILIDADE.csv")
	if err != nil {
		fmt.Println(Red + err.Error() + Reset)
		panic(err)
	}
	defer csvFile.Close()

	reader := csv.NewReader(csvFile)
	reader.Comma = ','

	var records []SkillsOld
	if err := gocsv.UnmarshalCSV(reader, &records); err != nil {
		fmt.Println(Red + err.Error() + Reset)
		panic(err)
	}
	if len(records) == 0 {
		panic("No records found")
	}

	return records
}

func createSkillsCsv(records []SkillsOld) {
	file, err := os.Create(filepath.Join(basePath, "skills.csv"))
	if err != nil {
		fmt.Println(Red + err.Error() + Reset)
		panic(err)
	}
	defer file.Close()

	var skills []*Skills
	for _, record := range records {
		cleanedName := replaceCharacter("\t", "", record.DSHabilidade)
		cleanedName = replaceCharacter("\n", "", cleanedName)
		cleanedName = replaceCharacter("\r", "", cleanedName)
		if cleanedName == "" {
			cleanedName = "NULL"
		}

		skill := &Skills{
			IDHabilidade: record.IDHabilidade,
			CandidateID:  record.IDUsuario,
			Name:         cleanedName,
		}
		skills = append(skills, skill)
	}

	gocsv.SetCSVWriter(func(out io.Writer) *gocsv.SafeCSVWriter {
		writer := csv.NewWriter(out)
		writer.Comma = '\t' // Ensure tab delimiter is used
		return gocsv.NewSafeCSVWriter(writer)
	})

	err = gocsv.MarshalFile(&skills, file)
	if err != nil {
		fmt.Println(Red + err.Error() + Reset)
		panic(err)
	}

	fmt.Println(Green + "Successfully created CSV file with the processed skills." + Reset)
}
