package taskboard

import (
	"context"
	"strings"
)

func (store *Store) emitTaskCreated(ctx context.Context, requestContext ServiceContext, channelID string, tasks []Task) {
	if store == nil || store.taskChangeSink == nil || len(tasks) == 0 {
		return
	}
	if strings.TrimSpace(channelID) == "" {
		channelID = tasks[0].ChannelID
	}
	store.taskChangeSink.HandleTaskChange(ctx, NewTaskCreatedEvent(requestContext, channelID, tasks))
}

func (store *Store) emitTaskUpdated(ctx context.Context, requestContext ServiceContext, task Task) {
	if store == nil || store.taskChangeSink == nil || strings.TrimSpace(task.ID) == "" {
		return
	}
	store.taskChangeSink.HandleTaskChange(ctx, NewTaskUpdatedEvent(requestContext, task))
}

func (store *Store) emitTasksUpdated(ctx context.Context, requestContext ServiceContext, tasks []Task) {
	for _, task := range tasks {
		if store == nil || store.taskChangeSink == nil || strings.TrimSpace(task.ID) == "" {
			continue
		}
		store.taskChangeSink.HandleTaskChange(ctx, NewTaskUpdatedEvent(requestContext, task))
	}
}

func (store *Store) emitTaskDeleted(ctx context.Context, requestContext ServiceContext, channelID string, taskID string) {
	if store == nil || store.taskChangeSink == nil || strings.TrimSpace(taskID) == "" {
		return
	}
	store.taskChangeSink.HandleTaskChange(ctx, NewTaskDeletedEvent(requestContext, channelID, taskID))
}

func createdTaskNumbers(tasks []CreatedTask) []int64 {
	taskNumbers := make([]int64, 0, len(tasks))
	for _, task := range tasks {
		taskNumbers = append(taskNumbers, task.TaskNumber)
	}
	return taskNumbers
}
