using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.Enums.ManualEnums;
using Kreta.Resources;
using Kreta.Web.Helpers;

namespace Kreta.Web.Areas.Orarend.Models
{
    public class TanuloHaziFeladatTabModel
    {
        public TanuloHaziFeladatTabModel()
        {
            OraAdatok = new HazifeladatOraAdatok();
        }

        public TanuloHaziFeladatTabModel(HaziFeladatokTabCO co)
        {
            ModosithatoNaplozarasMiatt = new BusinessLogic.Classes.NaplozarasLogic(ConnectionTypeExtensions.GetSessionConnectionType()).ModosithatoNaplozarasMiatt(co.OraDate, co.TanarHaziFeladat.OsztalyCsoportId);
            TanarHaziFeladat = new TanarHaziFeladatModel(co.TanarHaziFeladat);
            OraAdatok = new HazifeladatOraAdatok(co);
        }

        public HazifeladatOraAdatok OraAdatok { get; set; }
        public TanarHaziFeladatModel TanarHaziFeladat { get; set; }
        public bool ModosithatoNaplozarasMiatt { get; set; }
        public int? TanuloId { get; set; }
        public string TanuloAltalMegoldva { get; set; }
    }

    public class TanarHaziFeladatModel
    {
        public TanarHaziFeladatModel()
        {
            Csatolmanyok = new Dictionary<int, string>();
        }

        public TanarHaziFeladatModel(TanarHaziFeladatDetailCO co)
        {
            Id = co.Id;
            TanarNev = co.Rogzito;
            Tantargy = co.Tantargy;
            FeladasDatuma = co.FeladasDatuma;
            FeladatSzovege = co.Szoveg;
            OsztalyCsoport = co.OsztalyCsoport;
            Hatarido = co.Hatarido;
            HaziFeladathozHozzaadottKepek = co.HaziFeladathozHozzaadottKepek;
            Csatolmanyok = co.Csatolmanyok;
            OraiFeladatText = co.IsLathato.GetDisplayName();
            FeladatTipusId = co.FeladatTipusId;
        }

        public int? Id { get; set; }
        public string TanarNev { get; set; }
        public string Tantargy { get; set; }
        public string OsztalyCsoport { get; set; }
        public DateTime FeladasDatuma { get; set; }
        public DateTime? Hatarido { get; set; }
        public string FeladatSzovege { get; set; }
        public bool IsTanuloHaziFeladatEnabled { get; set; }
        public string HaziFeladathozHozzaadottKepek { get; set; }
        public IDictionary<int, string> Csatolmanyok { get; private set; }

        [Display(Name = nameof(OrarendResource.IsKiadott), ResourceType = typeof(OrarendResource))]
        public string OraiFeladatText { get; set; }
        public int? FeladatTipusId { get; set; }
    }

    public class HazifeladatOraAdatok
    {
        public HazifeladatOraAdatok() { }
        public HazifeladatOraAdatok(HaziFeladatokTabCO co)
        {
            OraId = co.OraId;
            OraType = co.OraType;
            OraDate = co.OraDate;
        }

        public int? OraId { get; set; }
        public CalendarOraTypeEnum OraType { get; set; }
        public DateTime OraDate { get; set; }
    }
}