package arn

// Register a list of supported services.
func init() {
	DataLists["mapping-services"] = []*Option{
		{"anidb/anime", "anidb/anime"},
		{"anilist/anime", "anilist/anime"},
		{"anilist/character", "anilist/character"},
		{"anilist/studio", "anilist/studio"},
		{"ann/company", "ann/company"},
		{"imdb/anime", "imdb/anime"},
		{"kitsu/anime", "kitsu/anime"},
		{"kitsu/character", "kitsu/character"},
		{"myanimelist/anime", "myanimelist/anime"},
		{"myanimelist/character", "myanimelist/character"},
		{"myanimelist/producer", "myanimelist/producer"},
		{"shoboi/anime", "shoboi/anime"},
		{"thetvdb/anime", "thetvdb/anime"},
		{"trakt/anime", "trakt/anime"},
		{"trakt/season", "trakt/season"},
	}
}

// Mapping ...
type Mapping struct {
	Service   string `json:"service" editable:"true" datalist:"mapping-services"`
	ServiceID string `json:"serviceId" editable:"true"`
}

// Name ...
func (mapping *Mapping) Name() string {
	switch mapping.Service {
	case "anidb/anime":
		return "AniDB"
	case "anilist/anime":
		return "AniList"
	case "imdb/anime":
		return "IMDb"
	case "kitsu/anime":
		return "Kitsu"
	case "myanimelist/anime":
		return "MAL"
	case "shoboi/anime":
		return "Shoboi"
	case "thetvdb/anime":
		return "TVDB"
	case "trakt/anime":
		return "Trakt"
	case "trakt/season":
		return "Trakt"
	default:
		return mapping.Service
	}
}

// Link ...
func (mapping *Mapping) Link() string {
	switch mapping.Service {
	case "kitsu/anime":
		return "https://kitsu.io/anime/" + mapping.ServiceID
	case "shoboi/anime":
		return "http://cal.syoboi.jp/tid/" + mapping.ServiceID
	case "anilist/anime":
		return "https://anilist.co/anime/" + mapping.ServiceID
	case "anilist/character":
		return "https://anilist.co/character/" + mapping.ServiceID
	case "anilist/studio":
		return "https://anilist.co/studio/" + mapping.ServiceID
	case "imdb/anime":
		return "https://www.imdb.com/title/" + mapping.ServiceID
	case "myanimelist/anime":
		return "https://myanimelist.net/anime/" + mapping.ServiceID
	case "thetvdb/anime":
		return "https://thetvdb.com/?tab=series&id=" + mapping.ServiceID
	case "anidb/anime":
		return "https://anidb.net/perl-bin/animedb.pl?show=anime&aid=" + mapping.ServiceID
	case "trakt/anime":
		return "https://trakt.tv/shows/" + mapping.ServiceID
	case "trakt/season":
		return "https://trakt.tv/seasons/" + mapping.ServiceID
	default:
		return ""
	}
}
