// ================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// You can delete these comments if you wish manually maintain this interface file.
// ================================================================================

package service

import (
	"context"
	v1 "kami/api/camel_oil/v1"
	"kami/internal/consts"
	"kami/internal/model"
	"kami/internal/model/entity"

	"github.com/shopspring/decimal"
)

type (
	ICamelOil interface {
		// GetAccountInfo 获取账号信息
		GetAccountInfo(ctx context.Context, accountId int64) (account *entity.V1CamelOilAccount, err error)
		// CreateAccount 创建账号
		CreateAccount(ctx context.Context, phoneNumber string, remark string) (accountId int64, err error)
		// UpdateAccount 更新账号信息
		UpdateAccount(ctx context.Context, accountId int64, remark string) (err error)
		// DeleteAccount 删除账号(软删除)
		DeleteAccount(ctx context.Context, accountId int64) (err error)
		// DeleteAllExpiredAccounts 删除所有过期无效的账号
		DeleteAllExpiredAccounts(ctx context.Context) (deletedCount int64, err error)
		// ListAccounts 获取账号列表
		ListAccounts(ctx context.Context, status int, current int, pageSize int) (accounts []*entity.V1CamelOilAccount, total int, err error)
		// ListAccount 查询账号列表（API版本）
		ListAccount(ctx context.Context, req *v1.ListAccountReq) (res *v1.ListAccountRes, err error)
		// UpdateAccountStatus 更新账号状态并记录历史
		UpdateAccountStatus(ctx context.Context, accountId int64, newStatus consts.CamelOilAccountStatus, operationType consts.CamelOilAccountChangeType, description string) (err error)
		// RecordAccountHistory 记录账号历史
		RecordAccountHistory(ctx context.Context, accountId int64, operationType consts.CamelOilAccountChangeType, oldStatus consts.CamelOilAccountStatus, newStatus consts.CamelOilAccountStatus, description string) (err error)
		// GetOrderCountByStatus 获取指定状态的订单数量
		GetOrderCountByStatus(ctx context.Context, status consts.CamelOilAccountStatus) (count int, err error)
		// GetAvailableOrderCapacity 获取当前可用订单容量
		// 计算所有在线账号的剩余可下单数之和
		GetAvailableOrderCapacity(ctx context.Context) (capacity int, err error)
		// GetAccountPoolStatus 获取账号池状态统计
		GetAccountPoolStatus(ctx context.Context) (status map[string]interface{}, err error)
		// GetAccountHistory 获取账号历史记录
		GetAccountHistory(ctx context.Context, req *v1.AccountHistoryReq) (res *v1.AccountHistoryRes, err error)
		// LoginAccount 执行账号登录流程
		// 注意：当前使用假数据，实际应对接骆驼加油平台和接码平台
		LoginAccount(ctx context.Context) (err error)
		// BatchLoginAccounts 批量登录账号
		BatchLoginAccounts(ctx context.Context, count int64) (successCount int64, err error)
		// GetAvailableAccount 获取可用账号（按last_used_at轮询）
		// 选择条件：
		// 1. status=2（在线）
		// 2. daily_order_count < 10（当日未达限额）
		// 3. daily_order_date=今日（日期匹配）
		// 排序：last_used_at ASC（最早使用的优先，实现轮询）
		GetAvailableAccount(ctx context.Context) (account *entity.V1CamelOilAccount, err error)
		// GetAccountStatistics 获取账号统计信息
		GetAccountStatistics(ctx context.Context, req *v1.AccountStatisticsReq) (res *v1.AccountStatisticsRes, err error)
		// CronAccountPrefetchTask 账户预拉取定时任务 - 由cron调度器定期调用
		// 流程：并发拉取账户到指定数量
		CronAccountPrefetchTask(ctx context.Context) error
		// CronPrefetchOrderSupplementTask 预拉取订单补充定时任务 - 由cron调度器定期调用
		// 流程：检查预拉取订单库存，不足时补充
		CronPrefetchOrderSupplementTask(ctx context.Context) error
		// CronOrderPaymentCheckTask 订单支付状态检测任务 - 由cron调度器定期调用
		CronOrderPaymentCheckTask(ctx context.Context) error
		// CronAccountDailyResetTask 账号日重置任务 - 由cron调度器在每日00:00调用
		CronAccountDailyResetTask(ctx context.Context) error
		CronVerifyCodeCheckTask(ctx context.Context) error
		// CronCardBindingTask 卡密绑定定时任务 - 由cron调度器定期调用
		// 流程：处理已支付但未绑定 Token 的订单，进行卡密绑定
		CronCardBindingTask(ctx context.Context) error
		// CronCleanExpiredPrefetchOrders 清理过期的预拉取订单
		CronCleanExpiredPrefetchOrders(ctx context.Context) (cleanedCount int, err error)
		// CronExpiredTokensCode 获取需要发送验证码的 Token（状态为待验证码）
		CronExpiredTokensCode(ctx context.Context) error
		// UpdateOrderStatus 更新订单状态并记录历史
		UpdateOrderStatus(ctx context.Context, orderId int64, newStatus consts.CamelOilOrderStatus, operationType consts.CamelOilOrderChangeType, rawData string, description string) (err error)
		// SubmitOrder 提交订单并返回支付宝支付链接
		SubmitOrder(ctx context.Context, req *v1.SubmitOrderReq) (res *v1.SubmitOrderRes, err error)
		// IncrementAccountOrderCount 增加账户订单计数（支付成功时调用）
		IncrementAccountOrderCount(ctx context.Context, accountId int64) error
		// TriggerOrderCallback 触发订单回调
		TriggerOrderCallback(ctx context.Context, req *v1.OrderCallbackReq) (res *v1.OrderCallbackRes, err error)
		// ProcessPendingCallbacks 处理待回调订单（定时任务使用）
		ProcessPendingCallbacks(ctx context.Context) error
		// GetOrderHistory 获取订单历史记录
		GetOrderHistory(ctx context.Context, req *v1.OrderHistoryReq) (res *v1.OrderHistoryRes, err error)
		// RecordOrderHistory 记录订单历史
		RecordOrderHistory(ctx context.Context, orderNo string, changeType consts.CamelOilOrderChangeType, rawData string, remark string) error
		// GetAccountOrders 查询账号关联订单
		GetAccountOrders(ctx context.Context, req *v1.AccountOrderListReq) (res *v1.AccountOrderListRes, err error)
		// ListOrder 查询订单列表
		ListOrder(ctx context.Context, req *v1.ListOrderReq) (res *v1.ListOrderRes, err error)
		// OrderDetail 查询订单详情
		OrderDetail(ctx context.Context, req *v1.OrderDetailReq) (res *v1.OrderDetailRes, err error)
		// ListPrefetchOrder 查询预拉取订单列表
		ListPrefetchOrder(ctx context.Context, req *v1.ListPrefetchOrderReq) (res *v1.ListPrefetchOrderRes, err error)
		// ExportOrder 导出订单数据为Excel
		ExportOrder(ctx context.Context, req *v1.ExportOrderReq) (fileName string, content []byte, err error)
		// GetPrefetchOrderCapacity 获取当前可用订单容量
		GetPrefetchOrderCapacity(ctx context.Context, amount float64) (capacity int, err error)
		// PrefetchOrderConcurrently 使用所有可用账号并发拉取订单，直到获取到可用订单为止
		PrefetchOrderConcurrently(ctx context.Context, amount float64) (result *model.PrefetchOrderResult, err error)
		// PrefetchOrder 拉取单个订单（用于单个账号）
		PrefetchOrder(ctx context.Context, account *entity.V1CamelOilAccount, amount float64) (prefetchId int64, err error)
		// ConcurrentPrefetchOrders 使用多个账号并发拉取订单
		ConcurrentPrefetchOrders(ctx context.Context, amount float64, targetCount int) (successCount int, err error)
		// SupplementPrefetchOrders 补充预拉取订单，当库存不足时调用
		SupplementPrefetchOrders(ctx context.Context) (supplementedCount int, err error)
		// MatchPrefetchOrder 将预拉取订单与用户订单进行匹配
		MatchPrefetchOrder(ctx context.Context, orderId string, amount float64) (result *model.PrefetchOrderResult, err error)
		// GetPrefetchOrderLogs 获取预拉取订单日志
		GetPrefetchOrderLogs(ctx context.Context, req *v1.GetPrefetchOrderLogsReq) (res *v1.GetPrefetchOrderLogsRes, err error)
		// SavePrefetchOrderLog 保存预拉取订单请求日志到Redis
		SavePrefetchOrderLog(ctx context.Context, respStr string)
		// UpdateSettings 更新骆驼模块设置
		UpdateSettings(ctx context.Context, req *v1.UpdateSettingsReq) (res *v1.UpdateSettingsRes, err error)
		// GetCamelOilSettings 获取骆驼模块设置的辅助函数
		GetCamelOilSettings(ctx context.Context) (*v1.CamelOilSettings, error)
		// CreateToken 创建 Token
		CreateToken(ctx context.Context, req *model.CamelOilTokenCreateInput) (tokenId int64, err error)
		// GetTokenInfo 获取 Token 信息
		GetTokenInfo(ctx context.Context, req *model.CamelOilTokenQueryInput) (token *entity.V1CamelOilToken, err error)
		// ListTokens 列出所有可用的 Token
		ListTokens(ctx context.Context) (tokens []*entity.V1CamelOilToken, err error)
		// ListTokensWithPagination 列出所有可用的 Token（支持分页和查询条件）
		ListTokensWithPagination(ctx context.Context, req *model.CamelOilTokenListInput) (tokens []*entity.V1CamelOilToken, total int, err error)
		// UpdateTokenInfo 修改 Token 基本信息（不包括 tokenValue）
		UpdateTokenInfo(ctx context.Context, req *model.CamelOilTokenUpdateInput) error
		// DeleteToken 删除 Token（软删除）
		DeleteToken(ctx context.Context, req *model.CamelOilTokenDeleteInput) error
		// UpdateTokenStatus 更新 Token 状态并记录日志
		UpdateTokenStatus(ctx context.Context, req *model.CamelOilTokenStatusUpdateInput) error
		// BindCardToToken 绑定卡密到 Token（使用轮询算法选择 Token）
		BindCardToToken(ctx context.Context, req *model.CamelOilCardBindInput) (bindingId int64, err error)
		// GetCardBindingInfo 获取卡密绑定信息
		GetCardBindingInfo(ctx context.Context, bindingId int64) (binding *entity.V1CamelOilCardBinding, err error)
		// GetCardBindingByOrder 获取订单绑定的卡密信息
		GetCardBindingByOrder(ctx context.Context, orderId int64) (binding *entity.V1CamelOilCardBinding, err error)
		// GetCardBindingsByToken 根据 tokenId 查询绑定的卡密信息
		GetCardBindingsByToken(ctx context.Context, req *model.CamelOilCardListInput) (bindings []*entity.V1CamelOilCardBinding, total int, err error)
		// GetTokenBindingStats 获取 Token 的绑定统计
		GetTokenBindingStats(ctx context.Context, tokenId int64) (bindCount int, totalAmount decimal.Decimal, err error)
		// CalculateTotalBindingAmount 计算所有 Token 的累计绑定金额
		CalculateTotalBindingAmount(ctx context.Context) (totalAmount decimal.Decimal, err error)
		// InputVerificationCode 输入验证码
		InputVerificationCode(ctx context.Context, req *model.CamelOilTokenLoginInput) (string, error)
		// ResendVerificationCode 重新发送验证码
		ResendVerificationCode(ctx context.Context, req *model.CamelOilTokenResendCodeInput) error
	}
)

var (
	localCamelOil ICamelOil
)

func CamelOil() ICamelOil {
	if localCamelOil == nil {
		panic("implement not found for interface ICamelOil, forgot register?")
	}
	return localCamelOil
}

func RegisterCamelOil(i ICamelOil) {
	localCamelOil = i
}
