using Microsoft.EntityFrameworkCore;
using System.Linq;
using System.Collections.Generic;
using Oqtane.Modules;

namespace AdamGais.Module.AnmeldeTool.Repository
{
    public class AnmeldeToolRepository : IAnmeldeToolRepository, ITransientService
    {
        private readonly IDbContextFactory<AnmeldeToolContext> _factory;

        public AnmeldeToolRepository(IDbContextFactory<AnmeldeToolContext> factory)
        {
            _factory = factory;
        }

        public IEnumerable<Models.AnmeldeTool> GetAnmeldeTools(int ModuleId)
        {
            using var db = _factory.CreateDbContext();
            return db.AnmeldeTool.Where(item => item.ModuleId == ModuleId).ToList();
        }

        public Models.AnmeldeTool GetAnmeldeTool(int AnmeldeToolId)
        {
            return GetAnmeldeTool(AnmeldeToolId, true);
        }

        public Models.AnmeldeTool GetAnmeldeTool(int AnmeldeToolId, bool tracking)
        {
            using var db = _factory.CreateDbContext();
            if (tracking)
            {
                return db.AnmeldeTool.Find(AnmeldeToolId);
            }
            else
            {
                return db.AnmeldeTool.AsNoTracking().FirstOrDefault(item => item.AnmeldeToolId == AnmeldeToolId);
            }
        }

        public Models.AnmeldeTool AddAnmeldeTool(Models.AnmeldeTool AnmeldeTool)
        {
            using var db = _factory.CreateDbContext();
            db.AnmeldeTool.Add(AnmeldeTool);
            db.SaveChanges();
            return AnmeldeTool;
        }

        public Models.AnmeldeTool UpdateAnmeldeTool(Models.AnmeldeTool AnmeldeTool)
        {
            using var db = _factory.CreateDbContext();
            db.Entry(AnmeldeTool).State = EntityState.Modified;
            db.SaveChanges();
            return AnmeldeTool;
        }

        public void DeleteAnmeldeTool(int AnmeldeToolId)
        {
            using var db = _factory.CreateDbContext();
            Models.AnmeldeTool AnmeldeTool = db.AnmeldeTool.Find(AnmeldeToolId);
            db.AnmeldeTool.Remove(AnmeldeTool);
            db.SaveChanges();
        }
    }
}