package args

import (
	"quyun/v2/providers/job"

	. "github.com/riverqueue/river"
	"go.ipao.vip/atom/contracts"
)

var _ contracts.JobArgs = MediaAssetProcessJob{}

// MediaAssetProcessJob 表示“媒体资源处理”的一次性异步任务。
//
// 设计说明：
// - 该任务用于将 media_assets 从 processing 推进到 ready/failed（由 worker 执行核心处理逻辑）。
// - 幂等由 River Unique + 业务侧 DB 状态机共同保证（重复入队会被跳过或无副作用）。
type MediaAssetProcessJob struct {
	// TenantID 租户ID（用于多租户隔离与唯一性维度）。
	TenantID int64 `json:"tenant_id" river:"unique"`
	// AssetID 媒体资源ID（用于唯一性维度）。
	AssetID int64 `json:"asset_id" river:"unique"`
}

func (MediaAssetProcessJob) Kind() string { return "media_asset_process" }

func (a MediaAssetProcessJob) UniqueID() string { return a.Kind() }

func (MediaAssetProcessJob) InsertOpts() InsertOpts {
	return InsertOpts{
		Queue:    job.QueueDefault,
		Priority: job.PriorityDefault,
		// 失败可重试；由 worker 判断不可重试的场景并 JobCancel。
		MaxAttempts: 10,
		UniqueOpts: UniqueOpts{
			ByArgs: true,
		},
	}
}
