using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PoolOuvintes : MonoBehaviour {

    public const float MAX_PREFERENCE = 0.15f;

    public static PoolOuvintes instance { get; private set; }
    
    //mudaria com o avançar do jogo (antenas melhores etc)
    public int maxOuvintes;
    Programa.Genero preferido;

    float[] preferencias;

    private void Start() {
        if (instance == null) {
            instance = this;
        } else {
            Destroy(gameObject);
        }
        DontDestroyOnLoad(gameObject);

        var gens = System.Enum.GetValues(typeof(Programa.Genero));
        preferencias = new float[gens.Length];

        float total = 0;
        foreach (Programa.Genero genero in gens) {
            var i = (int)genero;
            var preferencia = Mathf.Clamp(Random.Range(0, MAX_PREFERENCE), 0, 1 - total);
            total -= preferencia;

            preferencias[i] = preferencia;

            if (preferencia > preferencias[(int)preferido]) {
                preferido = genero;
            }
        }
    }

    public float Preferencia(Programa programa) {
        //nobody likes ads
        if (programa.ad) {
            return 0f;
        }
        return preferencias[(int)programa.genero];
    }

    public void AtualizaPreferencias(Programa.Genero melhor, Programa.Genero pior) {
        var shift = Random.Range(0.03f, 0.04f);
        preferencias[(int)melhor] += shift;
        preferencias[(int)pior] -= shift;

        //Bem simplificado, mas mantendo o saldo = 0
        var gens = System.Enum.GetValues(typeof(Programa.Genero));
        var saldo = 0f;
        for (int i = 0; i < preferencias.Length; i++) {
            if (i != (int)melhor && i != (int)pior) {
                if (saldo != 0) {
                    preferencias[i] += saldo;
                    saldo = 0;
                } else {
                    preferencias[i] = Random.Range(-0.02f, 0.02f);
                    saldo = -preferencias[i];
                }
            }
        }
    }
    
}
