package dto

import (
	"time"

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

// ConvertCurrentStockToDTO 将原料及其最新库存日志转换为 CurrentStockResponse DTO
func ConvertCurrentStockToDTO(material *models.RawMaterial, latestLog *models.RawMaterialStockLog) *CurrentStockResponse {
	if material == nil {
		return nil
	}

	stock := float32(0)
	lastUpdated := material.CreatedAt.Format(time.RFC3339) // 默认使用创建时间
	var lastOperationSourceType models.StockLogSourceType

	if latestLog != nil {
		stock = latestLog.AfterQuantity
		lastUpdated = latestLog.HappenedAt.Format(time.RFC3339)
		lastOperationSourceType = latestLog.SourceType
	}

	return &CurrentStockResponse{
		RawMaterialID:           material.ID,
		RawMaterialName:         material.Name,
		Stock:                   stock,
		LastUpdated:             lastUpdated,
		LastOperationSourceType: lastOperationSourceType,
	}
}

// ConvertStockLogToDTO 将 models.RawMaterialStockLog 转换为 StockLogResponse DTO
func ConvertStockLogToDTO(log *models.RawMaterialStockLog) *StockLogResponse {
	if log == nil {
		return nil
	}

	return &StockLogResponse{
		ID:              log.ID,
		RawMaterialID:   log.RawMaterialID,
		RawMaterialName: log.RawMaterial.Name, // 假设 RawMaterial 已被预加载
		ChangeAmount:    log.ChangeAmount,
		BeforeQuantity:  log.BeforeQuantity,
		AfterQuantity:   log.AfterQuantity,
		SourceType:      log.SourceType,
		SourceID:        log.SourceID,
		HappenedAt:      log.HappenedAt,
		Remarks:         log.Remarks,
	}
}

// ConvertStockLogListToDTO 将 []models.RawMaterialStockLog 转换为 ListStockLogResponse DTO
func ConvertStockLogListToDTO(logs []models.RawMaterialStockLog, total int64, page, pageSize int) *ListStockLogResponse {
	logDTOs := make([]StockLogResponse, len(logs))
	for i, log := range logs {
		logDTOs[i] = *ConvertStockLogToDTO(&log)
	}

	return &ListStockLogResponse{
		List: logDTOs,
		Pagination: PaginationDTO{
			Page:     page,
			PageSize: pageSize,
			Total:    total,
		},
	}
}
