package management

import (
	"strconv"

	"git.huangwc.com/pig/pig-farm-controller/internal/app/dto"
	"git.huangwc.com/pig/pig-farm-controller/internal/infra/logs"

	"github.com/labstack/echo/v4"
)

// TransferPigsAcrossBatches godoc
// @Summary      跨猪群调栏
// @Description  将指定数量的猪只从一个猪群的猪栏调动到另一个猪群的猪栏
// @Tags         猪群管理
// @Security     BearerAuth
// @Accept       json
// @Produce      json
// @Param        sourceBatchID path int true "源猪批次ID"
// @Param        body body dto.TransferPigsAcrossBatchesRequest true "跨群调栏请求信息"
// @Success      200 {object} controller.Response "调栏成功"
// @Router       /api/v1/pig-batches/transfer-across-batches/{sourceBatchID} [post]
func (c *PigBatchController) TransferPigsAcrossBatches(ctx echo.Context) error {
	reqCtx := logs.AddFuncName(ctx.Request().Context(), c.ctx, "TransferPigsAcrossBatches")

	const action = "跨猪群调栏"
	var req dto.TransferPigsAcrossBatchesRequest

	return handleAPIRequest(
		reqCtx, c, ctx, action, &req,
		func(ctx echo.Context, operatorID uint32, primaryID uint32, req *dto.TransferPigsAcrossBatchesRequest) error {
			// primaryID 在这里是 sourceBatchID
			return c.service.TransferPigsAcrossBatches(reqCtx, primaryID, req.DestBatchID, req.FromPenID, req.ToPenID, req.Quantity, operatorID, req.Remarks)
		},
		"调栏成功",
		func(ctx echo.Context) (uint32, error) { // 自定义ID提取器，从 ":sourceBatchID" 路径参数提取
			idParam := ctx.Param("sourceBatchID")
			parsedID, err := strconv.ParseUint(idParam, 10, 32)
			if err != nil {
				return 0, err
			}
			return uint32(parsedID), nil
		},
	)
}

// TransferPigsWithinBatch godoc
// @Summary      群内调栏
// @Description  将指定数量的猪只在同一个猪群的不同猪栏间调动
// @Tags         猪群管理
// @Security     BearerAuth
// @Accept       json
// @Produce      json
// @Param        id path int true "猪批次ID"
// @Param        body body dto.TransferPigsWithinBatchRequest true "群内调栏请求信息"
// @Success      200 {object} controller.Response "调栏成功"
// @Router       /api/v1/pig-batches/transfer-within-batch/{id} [post]
func (c *PigBatchController) TransferPigsWithinBatch(ctx echo.Context) error {
	reqCtx := logs.AddFuncName(ctx.Request().Context(), c.ctx, "TransferPigsWithinBatch")

	const action = "群内调栏"
	var req dto.TransferPigsWithinBatchRequest

	return handleAPIRequest(
		reqCtx, c, ctx, action, &req,
		func(ctx echo.Context, operatorID uint32, primaryID uint32, req *dto.TransferPigsWithinBatchRequest) error {
			// primaryID 在这里是 batchID
			return c.service.TransferPigsWithinBatch(reqCtx, primaryID, req.FromPenID, req.ToPenID, req.Quantity, operatorID, req.Remarks)
		},
		"调栏成功",
		nil, // 默认从 ":id" 路径参数提取ID
	)
}
