using EntKube.Provisioning.Domain;

namespace EntKube.Provisioning.Infrastructure;

/// <summary>
/// In-memory implementation of the service instance repository for local development.
/// Production will use EF Core with PostgreSQL.
/// </summary>
public class InMemoryServiceInstanceRepository : IServiceInstanceRepository
{
    private readonly List<ServiceInstance> instances = new();

    public Task<ServiceInstance?> GetByIdAsync(Guid id, CancellationToken ct = default)
    {
        ServiceInstance? instance = instances.FirstOrDefault(i => i.Id == id);
        return Task.FromResult(instance);
    }

    public Task<IReadOnlyList<ServiceInstance>> GetByClusterIdAsync(Guid clusterId, CancellationToken ct = default)
    {
        IReadOnlyList<ServiceInstance> result = instances.Where(i => i.ClusterId == clusterId).ToList().AsReadOnly();
        return Task.FromResult(result);
    }

    public Task<IReadOnlyList<ServiceInstance>> GetAllAsync(CancellationToken ct = default)
    {
        IReadOnlyList<ServiceInstance> result = instances.AsReadOnly();
        return Task.FromResult(result);
    }

    public Task AddAsync(ServiceInstance instance, CancellationToken ct = default)
    {
        instances.Add(instance);
        return Task.CompletedTask;
    }

    public Task UpdateAsync(ServiceInstance instance, CancellationToken ct = default)
    {
        return Task.CompletedTask;
    }
}
