using AlfaPrentice.Data;
using AlfaPrentice.Models;
using AlfaPrentice.Repositorys.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace AlfaPrentice.Repositorys.implementaties
{
    public class AgendaRepository : IAgendaRepository
    {
        AlfaPrenticeContext db;
        public AgendaRepository(AlfaPrenticeContext db)
        {
            this.db = db;
        }

        /// <summary>
        /// get list of all agendas
        /// </summary>
        /// <returns>ListAgenda</returns>
        public List<Agenda> GetAggendas()
        {
            return db.Agenda.ToList();
        }

        /// <summary>
        /// Get Agenda by Gebruiker_ID
        /// </summary>
        /// <param name="Gebruiker_ID"></param>
        /// <returns>Agenda</returns>
        public Agenda GetAgenda(int Gebruiker_ID)
        {
            return db.Agenda.Where(A => A.Gebruiker_ID == Gebruiker_ID).FirstOrDefault();
        }

        /// <summary>
        /// Add agenda for a Gebruiker
        /// </summary>
        /// <param name="agenda"></param>
        /// <returns>agenda</returns>
        public Agenda AddAgenda(Agenda agenda)
        {
            db.Agenda.Add(agenda);
            db.SaveChanges();

            return agenda;
        }

        /*
         querys for agendablock
        */

        /// <summary>
        /// Get Agendablock by Gebruiker_ID
        /// </summary>
        /// <param name="Gebruierk_ID"></param>
        /// <returns>GetBlokken</returns>
        public List<AgendaBlok> GetBlokken(int Gebruierk_ID)
        {
            return db.AgendaBlock.Where(G => G.Gebruiker_ID == Gebruierk_ID).ToList();
        }

        /// <summary>
        /// Get 1 Agendablock on Gebruiker_ID
        /// </summary>
        /// <param name="Gebruiker_ID"></param>
        /// <returns>GetBlok</returns>
        public AgendaBlok GetBlok(int Gebruiker_ID)
        {
            return db.AgendaBlock.Where(G => G.Gebruiker_ID == Gebruiker_ID).FirstOrDefault();
        }

        /// <summary>
        /// Add Agendablock for a gebruiker
        /// </summary>
        /// <param name="agendablok"></param>
        /// <returns>AddBlok</returns>
        public AgendaBlok AddBlok(AgendaBlok agendablok)
        {
            db.AgendaBlock.Add(agendablok);
            db.SaveChanges();

            return agendablok;
        }

        /// <summary>
        /// Update agendablok of a gebruiker
        /// </summary>
        /// <param name="agendablok"></param>
        /// <returns>UpdateBlok</returns>
        public AgendaBlok UpdateBlok(AgendaBlok agendablok)
        {
            db.AgendaBlock.Update(agendablok);
            db.SaveChanges();

            return agendablok;
        }

        /// <summary>
        /// Delete AgendaBlok of a Gebruiker
        /// </summary>
        /// <param name="Agendablok_ID"></param>
        /// <param name="Gebruiker_ID"></param>
        /// <returns>DeleteBlok</returns>
        public AgendaBlok DeleteBlok(int Agendablok_ID, int Gebruiker_ID, AgendaBlok agendablok)
        {
            db.AgendaBlock.Remove(agendablok); //.Where(A => A.AgendaBlok_ID == Agendablok_ID && A.Gebruiker_ID == Gebruiker_ID);
            db.SaveChanges();

            return null;
        }
    }
}
