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 AfspraakRepository : IAfspraakRepository
    {
        AlfaPrenticeContext db;
        public AfspraakRepository(AlfaPrenticeContext db)
        {
            this.db = db;
        }

        /// <summary>
        /// Get afspraken by ID of Gebruiker
        /// </summary>
        /// <param name="Gebruiker_ID"></param>
        /// <returns>GetAfspraken</returns>
        public List<Afspraak> GetAfspraken(int Gebruiker_ID)
        {
            return db.Afspraak.Where(G => G.Gebruiker_ID == Gebruiker_ID).ToList();
        }

        /// <summary>
        /// Get 1 afspraak by Afspraak_ID and Gebruiker_ID
        /// </summary>
        /// <param name="Afspraak_ID"></param>
        /// <param name="Gebruiker_ID"></param>
        /// <returns>GetAfspraak</returns>
        public Afspraak GetAfspraak(int Afspraak_ID, int Gebruiker_ID)
        {
            return db.Afspraak.Where(A => A.Afspraak_ID == Afspraak_ID && A.Gebruiker_ID == Gebruiker_ID).FirstOrDefault();
        }

        /// <summary>
        /// Add a afspraak
        /// </summary>
        /// <param name="afspraak"></param>
        /// <returns>AddAfspraak</returns>
        public Afspraak AddAfspraak(Afspraak afspraak)
        {
            db.Afspraak.Add(afspraak);
            db.SaveChanges();

            return afspraak;
        }

        /// <summary>
        /// Upodate afspraak 
        /// </summary>
        /// <param name="afspraak"></param>
        /// <returns>UpdateAfspraak</returns>
        public Afspraak UpdateAfspraak(Afspraak afspraak)
        {
            db.Afspraak.Update(afspraak);
            db.SaveChanges();

            return afspraak;
        }

        /// <summary>
        /// Delete a afspraak
        /// </summary>
        /// <param name="afspraak"></param>
        /// <returns>DeleteAfspraak</returns>
        public Afspraak DeleteAfspraak(Afspraak afspraak)
        {
            db.Afspraak.Remove(afspraak);
            db.SaveChanges();

            return afspraak;
        }

        /*
            Querys for deelnemers of Afpraak 
        */
        /*
        /// <summary>
        /// Get list of afspraak by Afspraak_ID
        /// </summary>
        /// <param name="Aspraak_ID"></param>
        /// <returns>GetDeelnemers</returns>
        public List<Deelnemer> GetDeelnemers(int Aspraak_ID)
        {
            return db.Deelnemer.Where(D => D.Afspraak_ID == Afspraak_ID).ToList();
        }*/

       /// <summary>
       /// Add deelnemer to afspraak
       /// </summary>
       /// <param name="deelnemer"></param>
       /// <returns>AddDeelnemer</returns>
        public Deelnemer AddDeelnemer(Deelnemer deelnemer)
        {
            db.Deelnemer.Add(deelnemer);
            db.SaveChanges();

            return deelnemer;
        }

        /// <summary>
        /// Update deelnemer of a afspraak
        /// </summary>
        /// <param name="deelnemer"></param>
        /// <returns>UpdateDeelnemer</returns>
        public Deelnemer UpdateDeelnemer(Deelnemer deelnemer)
        {
            db.Deelnemer.Update(deelnemer);
            db.SaveChanges();

            return deelnemer;
        }

        /// <summary>
        /// Delete deelnemer from a Afspraak
        /// </summary>
        /// <param name="deelnermer"></param>
        /// <returns>DeleteDeelnemer</returns>
        public Deelnemer Deletedeelnemer(Deelnemer deelnermer)
        {
            db.Deelnemer.Remove(deelnermer);
            db.SaveChanges();

            return deelnermer;
        }

    }
}
