using Nexus.Api.Data;
using Nexus.Api.DTOs;

namespace Nexus.Api.Services;

public enum ProjectDeleteOutcome { NotFound, Deleted, Archived }

public sealed record ProjectDeleteResult(ProjectDeleteOutcome Outcome, Project? Project = null);

public interface IProjectService
{
    Task<IReadOnlyList<Project>> GetAllAsync(CancellationToken ct = default);
    Task<Project?> GetByIdAsync(Guid id, CancellationToken ct = default);
    Task<Project> CreateAsync(CreateProjectRequest request, CancellationToken ct = default);
    Task<Project?> UpdateAsync(Guid id, UpdateProjectRequest request, CancellationToken ct = default);
    Task<ProjectDeleteResult> DeleteAsync(Guid id, CancellationToken ct = default);
}
