using DD.Persistence.Database.Entity;
using DD.Persistence.Models;
using DD.Persistence.Repositories;
using Mapster;
using Microsoft.EntityFrameworkCore;

namespace DD.Persistence.Repository.Repositories;
public class DataSourceSystemRepository : IDataSourceSystemRepository
{
    protected DbContext db;
    public DataSourceSystemRepository(DbContext db)
    {
        this.db = db;
    }
    protected virtual IQueryable<DataSourceSystem> GetQueryReadOnly() => db.Set<DataSourceSystem>();

    public virtual async Task Add(DataSourceSystemDto dataSourceSystemDto, CancellationToken token)
    {
        var entity = dataSourceSystemDto.Adapt<DataSourceSystem>();

        await db.Set<DataSourceSystem>().AddAsync(entity, token);
        await db.SaveChangesAsync(token);
    }

    public virtual async Task<IEnumerable<DataSourceSystemDto>> Get(CancellationToken token)
    {
        var query = GetQueryReadOnly();
        var entities = await query.ToArrayAsync(token);
        var dtos = entities.Select(e => e.Adapt<DataSourceSystemDto>());

        return dtos;
    }
}