using System;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using HospitalManagementSystem.Data;
using Volo.Abp.DependencyInjection;

namespace HospitalManagementSystem.EntityFrameworkCore;

public class EntityFrameworkCoreHospitalManagementSystemDbSchemaMigrator
    : IHospitalManagementSystemDbSchemaMigrator, ITransientDependency
{
    private readonly IServiceProvider _serviceProvider;

    public EntityFrameworkCoreHospitalManagementSystemDbSchemaMigrator(
        IServiceProvider serviceProvider)
    {
        _serviceProvider = serviceProvider;
    }

    public async Task MigrateAsync()
    {
        /* We intentionally resolve the HospitalManagementSystemDbContext
         * from IServiceProvider (instead of directly injecting it)
         * to properly get the connection string of the current tenant in the
         * current scope.
         */

        await _serviceProvider
            .GetRequiredService<HospitalManagementSystemDbContext>()
            .Database
            .MigrateAsync();
    }
}
