package wordloader import ( "golias/models" "math/rand/v2" "os" "strings" ) type Loader struct { FilePath string BlackCount uint8 WhiteCount uint8 RedCount uint8 BlueCount uint8 } func InitDefaultLoader(fpath string) *Loader { return &Loader{ FilePath: fpath, BlackCount: 1, WhiteCount: 7, RedCount: 8, BlueCount: 9, } } func (l *Loader) WholeCount() uint8 { return l.BlackCount + l.WhiteCount + l.RedCount + l.BlueCount } func (l *Loader) Load() ([]models.WordCard, error) { data, err := os.ReadFile(l.FilePath) if err != nil { return nil, err } lines := strings.Split(string(data), "\n") rand.Shuffle(len(lines), func(i, j int) { lines[i], lines[j] = lines[j], lines[i] }) words := lines[:int(l.WholeCount())] cards := make([]models.WordCard, l.WholeCount()) for i, word := range words { if l.BlackCount > 0 { cards[i] = models.WordCard{ Word: word, Color: "black", } l.BlackCount-- continue } if l.WhiteCount > 0 { cards[i] = models.WordCard{ Word: word, Color: "white", } l.WhiteCount-- continue } if l.RedCount > 0 { cards[i] = models.WordCard{ Word: word, Color: "red", } l.RedCount-- continue } if l.BlueCount > 0 { cards[i] = models.WordCard{ Word: word, Color: "blue", } l.BlueCount-- } } rand.Shuffle(len(cards), func(i, j int) { cards[i], cards[j] = cards[j], cards[i] }) return cards, nil }