namespace ColaFlow.API.Services;

public interface IRealtimeNotificationService
{
    // Project-level notifications
    Task NotifyProjectCreated(Guid tenantId, Guid projectId, object project);
    Task NotifyProjectUpdated(Guid tenantId, Guid projectId, object project);
    Task NotifyProjectArchived(Guid tenantId, Guid projectId);
    Task NotifyProjectUpdate(Guid tenantId, Guid projectId, object data);

    // Epic notifications
    Task NotifyEpicCreated(Guid tenantId, Guid projectId, Guid epicId, object epic);
    Task NotifyEpicUpdated(Guid tenantId, Guid projectId, Guid epicId, object epic);
    Task NotifyEpicDeleted(Guid tenantId, Guid projectId, Guid epicId);

    // Story notifications
    Task NotifyStoryCreated(Guid tenantId, Guid projectId, Guid epicId, Guid storyId, object story);
    Task NotifyStoryUpdated(Guid tenantId, Guid projectId, Guid epicId, Guid storyId, object story);
    Task NotifyStoryDeleted(Guid tenantId, Guid projectId, Guid epicId, Guid storyId);

    // Task notifications
    Task NotifyTaskCreated(Guid tenantId, Guid projectId, Guid storyId, Guid taskId, object task);
    Task NotifyTaskUpdated(Guid tenantId, Guid projectId, Guid storyId, Guid taskId, object task);
    Task NotifyTaskDeleted(Guid tenantId, Guid projectId, Guid storyId, Guid taskId);
    Task NotifyTaskAssigned(Guid tenantId, Guid projectId, Guid taskId, Guid assigneeId);

    // Issue notifications
    Task NotifyIssueCreated(Guid tenantId, Guid projectId, object issue);
    Task NotifyIssueUpdated(Guid tenantId, Guid projectId, object issue);
    Task NotifyIssueDeleted(Guid tenantId, Guid projectId, Guid issueId);
    Task NotifyIssueStatusChanged(Guid tenantId, Guid projectId, Guid issueId, string oldStatus, string newStatus);

    // User-level notifications
    Task NotifyUser(Guid userId, string message, string type = "info");
    Task NotifyUsersInTenant(Guid tenantId, string message, string type = "info");
}
