using System;
using System.Runtime.Serialization;

namespace ZadaniaWPF.Model
{
    public enum PriorytetZadania : byte { MniejWażne, Ważne, Krytyczne };

    //[Serializable]
    [DataContract]
    public class Zadanie
    {
        public int? Id { get; set; } = null;
        [DataMember] public string Opis { get; private set; }
        [DataMember] public DateTime DataUtworzenia { get; private set; }
        [DataMember] public DateTime PlanowanyTerminRealizacji { get; private set; }
        [DataMember] public PriorytetZadania Priorytet { get; private set; }
        [DataMember] public bool CzyZrealizowane { get; set; }

        public Zadanie(string opis, DateTime dataUtworzenia,
            DateTime planowanyTerminRealizacji, PriorytetZadania priorytetZadania,
            bool czyZrealizowane = false)
        {
            this.Opis = opis;
            this.DataUtworzenia = dataUtworzenia;
            this.PlanowanyTerminRealizacji = planowanyTerminRealizacji;
            this.Priorytet = priorytetZadania;
            this.CzyZrealizowane = czyZrealizowane;
        }

        public override string ToString()
        {
            return Opis + ", priorytet: " + OpisPriorytetu(Priorytet) +
               ", data utworzenia: " + DataUtworzenia +
               ", planowany termin realizacji: " + PlanowanyTerminRealizacji.ToString() +
               ", " + (CzyZrealizowane ? "zrealizowane" : "niezrealizowane");
        }

        public static string OpisPriorytetu(PriorytetZadania priorytet)
        {
            switch (priorytet)
            {
                case PriorytetZadania.MniejWażne:
                    return "mniej ważne";
                case PriorytetZadania.Ważne:
                    return "ważne";
                case PriorytetZadania.Krytyczne:
                    return "krytyczne";
                default:
                    throw new Exception("Nierozpoznany priorytet zadania");
            }
        }

        public static PriorytetZadania ParsujOpisPriorytetu(string opisPriorytetu)
        {
            switch (opisPriorytetu)
            {
                case "mniej ważne":
                    return PriorytetZadania.MniejWażne;
                case "ważne":
                    return PriorytetZadania.Ważne;
                case "krytyczne":
                    return PriorytetZadania.Krytyczne;
                default:
                    throw new Exception("Nierozpoznany opis priorytetu zadania");
            }
        }

    }
}
