package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
	"strings"
	"time"

	"github.com/aerogo/flow/jobqueue"
	"github.com/animenotifier/arn"
	"github.com/fatih/color"
	"github.com/parnurzeal/gorequest"
)

var ticker = time.NewTicker(50 * time.Millisecond)

func main() {
	color.Yellow("Downloading anime images")
	defer arn.Node.Close()

	jobs := jobqueue.New(work)
	allAnime, _ := arn.AllAnime()

	for _, anime := range allAnime {
		jobs.Queue(anime)
	}

	results := jobs.Wait()
	color.Green("Finished downloading %d anime images.", len(results))
}

func work(job interface{}) interface{} {
	anime := job.(*arn.Anime)

	if !strings.HasPrefix(anime.Image.Original, "//media.kitsu.io/anime/") {
		return nil
	}

	<-ticker.C
	resp, body, errs := gorequest.New().Get(anime.Image.Original).End()

	if len(errs) > 0 {
		color.Red(errs[0].Error())
		return errs[0]
	}

	if resp.StatusCode != http.StatusOK {
		color.Red("Status %d", resp.StatusCode)
	}

	extension := anime.Image.Original[strings.LastIndex(anime.Image.Original, "."):]
	fileName := "anime/" + anime.ID + extension
	fmt.Println(fileName)

	ioutil.WriteFile(fileName, []byte(body), 0644)

	return nil
}