using System.Collections.Generic;
using System.Linq;

namespace ZadaniaUsługaRest.Models
{
    using ZadaniaWPF.Model;

    public class Zadania
    {
        private List<Zadanie> listaZadań = new List<Zadanie>();

        string ścieżkaPliku;
        bool zapiszPrzyKażdejZmianie;

        public Zadania(string ścieżkaPliku, bool zapiszPrzyKażdymDodaniuZadania = true)
        {
            this.ścieżkaPliku = ścieżkaPliku;
            this.zapiszPrzyKażdejZmianie = zapiszPrzyKażdymDodaniuZadania;
            listaZadań = PlikXml.Czytaj(ścieżkaPliku).ToList();
        }

        public bool Zapisz()
        {
            try
            {
                PlikXml.Zapisz(ścieżkaPliku, listaZadań);
                return true;
            }
            catch
            {
                return false;
            }
        }

        public int Liczba
        {
            get
            {
                return listaZadań.Count;
            }
        }

        public Zadanie this[int indeks]
        {
            get
            {
                return listaZadań[indeks];
            }
        }

        public Zadanie[] PobierzWszystkie()
        {
            return listaZadań.ToArray();
        }

        public void DodajZadanie(Zadanie zadanie)
        {
            listaZadań.Add(zadanie);
            if (zapiszPrzyKażdejZmianie) Zapisz();
        }

        private bool usuńZadanie(Zadanie zadanie)
        {
            bool wynik = listaZadań.Remove(zadanie);
            if (zapiszPrzyKażdejZmianie) Zapisz();
            return wynik;
        }

        public bool UsuńZadanie(Zadanie zadanie)
        {
            Zadanie zadanieDoUsunięcia = listaZadań.First(
                z => z.Opis == zadanie.Opis && 
                     z.PlanowanyTerminRealizacji == zadanie.PlanowanyTerminRealizacji &&
                     z.Priorytet == zadanie.Priorytet &&
                     z.DataUtworzenia == zadanie.DataUtworzenia &&
                     z.CzyZrealizowane == zadanie.CzyZrealizowane);
            return usuńZadanie(zadanieDoUsunięcia);            
        }

        public bool UsuńZadanie(int indeks)
        {
            return usuńZadanie(listaZadań[indeks]);
        }
    }
}