// i2_bot – Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov

package statistics

// PossibilityRequiredPokeballs returns possibility of catching pokememe
// It's based on location, grade of pokememe and current level of player
func (s *Statistics) PossibilityRequiredPokeballs(location int, grade int, lvl int) (float64, int) {
	var basePossibility float64
	var requiredPokeballs int
	var percentile float64

	if lvl > 3 {
		switch {
		case grade == (lvl + 1):
			basePossibility = 0.05
		case grade == lvl:
			basePossibility = 0.5
		case grade == (lvl - 1):
			basePossibility = 0.3
		case grade == (lvl - 2):
			basePossibility = 0.1
		case grade == (lvl - 3):
			basePossibility = 0.05
		default:
			basePossibility = 0.00
		}
	} else if lvl == 3 {
		switch grade {
		case 4:
			basePossibility = 0.05
		case 3:
			basePossibility = 0.5
		case 2:
			basePossibility = 0.3
		case 1:
			basePossibility = 0.15
		default:
			basePossibility = 0.00
		}
	} else if lvl == 2 {
		switch grade {
		case 3:
			basePossibility = 0.05
		case 2:
			basePossibility = 0.70
		case 1:
			basePossibility = 0.25
		default:
			basePossibility = 0.00
		}
	} else if lvl == 1 {
		switch grade {
		case 2:
			basePossibility = 0.80
		case 1:
			basePossibility = 0.20
		default:
			basePossibility = 0.00
		}
	}

	var pokememesCount int

	err := c.Db.Get(&pokememesCount, c.Db.Rebind("SELECT count(*) FROM pokememes p, pokememes_locations pl WHERE p.grade = ? AND pl.location_id = ? AND pl.pokememe_id = p.id;"), grade, location)
	if err != nil {
		c.Log.Error(err)
	}

	if basePossibility != 0 && pokememesCount != 0 {
		percentile = basePossibility * 100.0 / float64(pokememesCount)
		requiredPokeballs = int(100.0 / percentile)
	}

	return percentile, requiredPokeballs
}