package store

import (
	"context"

	"chat-switchboard/models"
)

// TaskStore manages task definitions and run history.
type TaskStore interface {
	// Task CRUD
	Create(ctx context.Context, t *models.Task) error
	GetByID(ctx context.Context, id string) (*models.Task, error)
	Update(ctx context.Context, id string, patch models.TaskPatch) error
	Delete(ctx context.Context, id string) error
	ListByOwner(ctx context.Context, ownerID string) ([]models.Task, error)
	ListByTeam(ctx context.Context, teamID string) ([]models.Task, error)
	ListAll(ctx context.Context) ([]models.Task, error)

	// Trigger lookup (inbound webhooks)
	GetByTriggerToken(ctx context.Context, token string) (*models.Task, error)

	// Scheduler queries
	ClaimDueTask(ctx context.Context) (*models.Task, error)
	SetNextRun(ctx context.Context, id string, nextRun interface{}) error
	SetLastRun(ctx context.Context, id string) error
	IncrementRunCount(ctx context.Context, id string) error

	// Run history
	CreateRun(ctx context.Context, r *models.TaskRun) error
	CreateRunExclusive(ctx context.Context, taskID string) (*models.TaskRun, error)
	UpdateRun(ctx context.Context, id string, status string, tokensUsed, toolCalls, wallClock int, errMsg string) error
	TransitionRunStatus(ctx context.Context, id string, status string) error
	GetActiveRun(ctx context.Context, taskID string) (*models.TaskRun, error)
	GetQueuedRun(ctx context.Context, taskID string) (*models.TaskRun, error)
	ListRuns(ctx context.Context, taskID string, limit int) ([]models.TaskRun, error)
}
