package pokemon
import (
"fmt"
"git.ssns.se/git/frozendragon/pokemon-go-trade/internal/db"
)
type Package struct {
Db db.Interface
}
type Interface interface {
GetAvailablePokemons() (*Pokemons, error)
}
type Pokemons struct {
Pokemons []Pokemon `json:"pokemons"`
}
type Pokemon struct {
ID int `json:"id"`
DexNumber int `json:"dex_number"`
Url string `json:"url"`
Variations []Pokemon `json:"variations, omitempty"`
}
func (p *Package) GetAvailablePokemons() (*Pokemons, error) {
dbPokemons, err := p.Db.GetPokemons()
if err != nil {
return nil, err
}
var pokemons Pokemons
for _, pokemon := range dbPokemons {
dexFound := false
if pokemon.Region != "" {
for i, p := range pokemons.Pokemons {
if p.DexNumber == pokemon.DexNumber {
pokemons.Pokemons[i].Variations = append(pokemons.Pokemons[i].Variations, Pokemon{
ID: pokemon.ID,
DexNumber: pokemon.DexNumber,
Url: fmt.Sprintf("image/%s", pokemon.ShinyImageName),
})
pokemons.Pokemons[i].Variations = append(pokemons.Pokemons[i].Variations, Pokemon{
ID: pokemon.ID,
DexNumber: pokemon.DexNumber,
Url: fmt.Sprintf("image/%s", pokemon.ImageName),
})
dexFound = true
break
}
}
}
if dexFound {
continue
}
if pokemon.ShinyEnabled {
pokemons.Pokemons = append(pokemons.Pokemons, Pokemon{
ID: pokemon.ID,
DexNumber: pokemon.DexNumber,
Url: fmt.Sprintf("image/%s", pokemon.ShinyImageName),
Variations: []Pokemon{
{
ID: pokemon.ID,
Url: fmt.Sprintf("image/%s", pokemon.ImageName),
},
},
})
} else {
pokemons.Pokemons = append(pokemons.Pokemons, Pokemon{
ID: pokemon.ID,
DexNumber: pokemon.DexNumber,
Url: fmt.Sprintf("image/%s", pokemon.ImageName),
Variations: []Pokemon{},
})
}
}
return &pokemons, nil
}