using LiteDB;

using skydiveLogs_api.Data.Interface;
using skydiveLogs_api.Model;

namespace skydiveLogs_api.Data
{
    public class LiteDbProvider : IDataProvider
    {
        public LiteDbProvider(string connectionString)
        {
            _db = new LiteDatabase(connectionString);
            BsonMapper.Global.Entity<Jump>().DbRef(x => x.JumpType, "JumpType");
            BsonMapper.Global.Entity<Jump>().DbRef(x => x.Aircraft, "Aircraft");
            BsonMapper.Global.Entity<Jump>().DbRef(x => x.DropZone, "DropZone");
            BsonMapper.Global.Entity<Jump>().DbRef(x => x.Gear, "Gear");
        }

        public ILiteCollection<T> GetCollection<T>()
        {
            return _db.GetCollection<T>();
        }

        public void Close()
        {
            _db.Dispose();
        }

        private readonly LiteDatabase _db;

        public ILiteCollection<Aircraft> CollOfAircraft => _db.GetCollection<Aircraft>();

        public ILiteCollection<DropZone> CollOfDropZone => _db.GetCollection<DropZone>();

        public ILiteCollection<Gear> CollOfGear => _db.GetCollection<Gear>();

        public ILiteCollection<JumpType> CollOfJumpType => _db.GetCollection<JumpType>();

        public ILiteCollection<Jump> CollOfJump => _db.GetCollection<Jump>();

        public ILiteCollection<User> CollOfUser => _db.GetCollection<User>();
    }
}
