using FirebaseAdmin.Messaging;
using Marco.Pms.Model.Dtos.Attendance;
using Marco.Pms.Model.Expenses;
using Marco.Pms.Model.Projects;

namespace Marco.Pms.Services.Service.ServiceInterfaces
{
    public interface IFirebaseService
    {
        Task SendLoginMessageAsync(string name, Guid tenentId);
        Task SendLoginOnAnotherDeviceMessageAsync(Guid employeeId, string fcmToken, Guid tenentId);

        Task SendEmployeeSuspendMessageAsync(Guid employeeId, Guid tenantId);

        Task SendAttendanceMessageAsync(Guid projectId, string Name, ATTENDANCE_MARK_TYPE markType, Guid employeeId, Guid tenantId);
        Task SendAssignTaskMessageAsync(Guid workItemId, string name, List<Guid> teamMembers, Guid tenantId);
        Task SendReportTaskMessageAsync(Guid taskAllocationId, string name, Guid tenantId);
        Task SendTaskCommentMessageAsync(Guid taskAllocationId, string name, Guid tenantId);
        Task SendApproveTaskMessageAsync(Guid taskAllocationId, string name, Guid tenantId);
        Task SendModifyTaskMeaasgeAsync(List<Guid> workItemIds, string name, bool IsExist, Guid tenantId);
        Task SendModifyWorkAreaMeaasgeAsync(Guid workAreaId, string name, bool IsExist, Guid tenantId);
        Task SendModifyFloorMeaasgeAsync(Guid floorId, string name, bool IsExist, Guid tenantId);
        Task SendModifyBuildingMeaasgeAsync(Guid buildingId, string name, bool IsExist, Guid tenantId);
        Task SendDeleteTaskMeaasgeAsync(Guid workItemId, string name, Guid tenantId);

        Task SendProjectAllocationMessageAsync(List<ProjectAllocation> projectAllocations, string name, Guid tenantId);
        Task SendModifyProjectMessageAsync(Project project, string name, bool IsExist, Guid tenantId);
        Task SendExpenseMessageAsync(Expenses expenses, string name, Guid tenantId);

        Task SendContactAsync(Guid contactId, List<Guid> bucketIds, Notification notification, Guid tenantId);
        Task SendContactNoteAsync(Guid contactId, List<Guid> bucketIds, Notification notification, Guid tenantId);
        Task SendBucketAsync(Guid bucketId, Notification notification, Guid tenantId);
        Task SendAssignBucketAsync(List<Guid> employeeIds, Notification notification, Guid tenantId);

        Task SendEmployeeDocumentMessageAsync(Guid documentId, Guid employeeId, Notification notification, Guid tenantId);
        Task SendProjectDocumentMessageAsync(Guid documentId, Guid projectId, Notification notification, Guid tenantId);
    }
}
