package pig

import (
	"context"

	"git.huangwc.com/pig/pig-farm-controller/internal/infra/logs"
	"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
	"git.huangwc.com/pig/pig-farm-controller/internal/infra/repository"

	"gorm.io/gorm"
)

// PigTradeManager 定义了与猪只交易相关的操作接口。
// 这是一个领域服务，负责协调业务逻辑。
type PigTradeManager interface {
	// SellPig 处理卖猪的业务逻辑，通过仓库接口创建 PigSale 记录。
	SellPig(ctx context.Context, tx *gorm.DB, sale *models.PigSale) error

	// BuyPig 处理买猪的业务逻辑，通过仓库接口创建 PigPurchase 记录。
	BuyPig(ctx context.Context, tx *gorm.DB, purchase *models.PigPurchase) error
}

// pigTradeManager 是 PigTradeManager 接口的具体实现。
// 它依赖于 repository.PigTradeRepository 接口来执行数据持久化操作。
type pigTradeManager struct {
	ctx       context.Context
	tradeRepo repository.PigTradeRepository
}

// NewPigTradeManager 是 pigTradeManager 的构造函数。
func NewPigTradeManager(ctx context.Context, tradeRepo repository.PigTradeRepository) PigTradeManager {
	return &pigTradeManager{
		ctx:       ctx,
		tradeRepo: tradeRepo,
	}
}

// SellPig 实现了卖猪的逻辑。
// 它通过调用 tradeRepo 来持久化销售记录。
func (s *pigTradeManager) SellPig(ctx context.Context, tx *gorm.DB, sale *models.PigSale) error {
	managerCtx := logs.AddFuncName(ctx, s.ctx, "SellPig")
	// 在此处可以添加更复杂的卖猪前置校验或业务逻辑
	// 例如：检查猪只库存、更新猪只状态等。
	return s.tradeRepo.CreatePigSaleTx(managerCtx, tx, sale)
}

// BuyPig 实现了买猪的逻辑。
// 它通过调用 tradeRepo 来持久化采购记录。
func (s *pigTradeManager) BuyPig(ctx context.Context, tx *gorm.DB, purchase *models.PigPurchase) error {
	managerCtx := logs.AddFuncName(ctx, s.ctx, "BuyPig")
	// 在此处可以添加更复杂的买猪前置校验或业务逻辑
	// 例如：检查资金、更新猪只状态等。
	return s.tradeRepo.CreatePigPurchaseTx(managerCtx, tx, purchase)
}
