using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Nexus.Api.Data;
using Nexus.Api.Migrations;
using Xunit;

namespace Nexus.Api.Tests;

public sealed class MigrationSnapshotTests
{
    [Fact]
    public void Historical_task_migrations_are_discoverable()
    {
        var options = new DbContextOptionsBuilder<NexusDbContext>()
            .UseNpgsql(
                "Host=127.0.0.1;Database=nexus_migration_contract;Username=nexus;Password=unused")
            .Options;
        using var db = new NexusDbContext(options);
        var migrations = db.GetService<IMigrationsAssembly>().Migrations.Keys;

        Assert.Contains("20260618233000_AddTaskParentChild", migrations);
        Assert.Contains("20260618233001_AddTaskDueDate", migrations);
        Assert.Contains("20260618233002_AddActivityTaskReference", migrations);
    }

    [Fact]
    public void Snapshot_builds_agent_provisioning_relationships()
    {
        var model = new NexusDbContextModelSnapshot().Model;
        var proposal = model.FindEntityType("Nexus.Api.Data.AgentProposal");
        var request = model.FindEntityType("Nexus.Api.Data.AgentProvisionRequest");

        Assert.NotNull(proposal?.FindNavigation("ProvisionRequests"));
        Assert.NotNull(request?.FindNavigation("Proposal"));
    }
}
