package main

import (
	"fmt"
	"time"

	"github.com/animenotifier/jikan"

	"github.com/animenotifier/arn"
	"github.com/fatih/color"
)

var jikanDB = arn.Node.Namespace("jikan")

func main() {
	color.Yellow("Syncing characters with Jikan API")
	defer arn.Node.Close()

	allAnime := jikanDB.All("Anime")

	count := 0

	for animeObj := range allAnime {
		anime := animeObj.(*jikan.Anime)

		if len(anime.Character) == 0 {
			continue
		}

		fmt.Println(anime.Title)

		for _, character := range anime.Character {
			characterID := jikan.GetCharacterIDFromURL(character.URL)

			if characterID == "" {
				fmt.Println("Invalid character ID")
				continue
			}

			fetchCharacter(characterID)
		}
	}

	color.Green("Finished syncing %d characters.", count)
}

func fetchCharacter(malCharacterID string) {
	fmt.Printf("Fetching character ID %s\n", malCharacterID)

	if jikanDB.Exists("Character", malCharacterID) {
		return
	}

	time.Sleep(500 * time.Millisecond)
	character, err := jikan.GetCharacter(malCharacterID)

	if err == nil {
		jikanDB.Set("Character", malCharacterID, character)
		return
	}

	fmt.Printf("Error fetching %s: %v\n", malCharacterID, err)
}