using Microsoft.EntityFrameworkCore;
using DD.Persistence.Database.Entity;
using DD.Persistence.Database.Model;

namespace DD.Persistence.Database;

/// <summary>
/// EF контекст для любых БД поддерживаемых в EF
/// </summary>
public class PersistenceDbContext : DbContext
{
    public DbSet<DataSaub> DataSaub => Set<DataSaub>();

    public DbSet<TagValue> TagValues => Set<TagValue>();
    public DbSet<TagSetValue> TagSetValues => Set<TagSetValue>();
    public DbSet<TagBag> TagBag => Set<TagBag>();

    public DbSet<Setpoint> Setpoint => Set<Setpoint>();

    public DbSet<TimestampedSet> TimestampedSets => Set<TimestampedSet>();

    public DbSet<ChangeLog> ChangeLog => Set<ChangeLog>();

    public DbSet<TechMessage> TechMessage => Set<TechMessage>();

    public DbSet<ParameterData> ParameterData => Set<ParameterData>();

	public DbSet<DataSourceSystem> DataSourceSystem => Set<DataSourceSystem>();

	public PersistenceDbContext(DbContextOptions options)
        : base(options)
    {

    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<TimestampedSet>()
            .Property(e => e.Set)
            .HasJsonConversion();

        modelBuilder.Entity<ChangeLog>()
            .Property(e => e.Value)
            .HasJsonConversion();

        modelBuilder.Entity<TagBag>()
            .Property(e => e.Values)
            .HasJsonConversion();
    }
}