using System.Text.Json.Serialization;

namespace PiattaformaStreaming;

[Serializable]
public class SerieTv: Media
{
    [JsonInclude]
    [JsonPropertyName("Episodi")]
    private List<Episodio> episodi;
    
    [JsonIgnore]
    public override int Durata
    {
        get { return episodi.Sum(x => x.Durata); }
    }

    public SerieTv(string titolo, int anno, int valutazione, params Episodio[] episodio)
        : base(titolo, 0, anno, valutazione)
    {
        episodi = new List<Episodio>(episodio);
    }

    public void AggiungiEpisodio(Episodio episodio)
    {
        episodi.Add(episodio);
    }

    public override string Riproduci()
    {
        string s = string.Format("Riproduco Serie TV {0}", Titolo);
        foreach (Episodio episodio in episodi)
        {
            s += episodio.Riproduci();
        }
        return s;
    }

    public override string Info()
    {
        string infoEpisodi = String.Empty;
        foreach (Episodio episodio in episodi)
        {
            infoEpisodi += episodio.Info() + "\n";
        }
        return base.Info() + string.Format(", Episodi: \n\t{0}", infoEpisodi);
    }
    
    public override string ToString()
    {
        string stringEpisodi = String.Empty;
        foreach (Episodio episodio in episodi)
        {
            stringEpisodi += episodio.ToString() + "/";
        }
        return base.ToString() + string.Format("/{0}", stringEpisodi.Substring(0, stringEpisodi.Length - 1));
    }
    
    #region File Testo

    public SerieTv(string s): base(s.Split('/')[0])
    {
        string[] parti = s.Split('/');
        if (parti.Length < 1)
            throw new Exception("ToString invalido");

        try
        {
            episodi = new List<Episodio>();
            foreach (string parte in parti.Skip(1))
            {
                episodi.Add(new Episodio(parte));
            }
        }
        catch (Exception ex)
        {
            throw;
        }
    }
    
    #endregion
    
    #region File JSON

    public SerieTv() { }

    #endregion
}