package logic

import (
	"fusenapi/utils/auth"
	"fusenapi/utils/basic"

	"context"

	"fusenapi/server/home-user-auth/internal/svc"
	"fusenapi/server/home-user-auth/internal/types"

	"github.com/zeromicro/go-zero/core/logx"
)

type UserOrderListLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

func NewUserOrderListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UserOrderListLogic {
	return &UserOrderListLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

func (l *UserOrderListLogic) UserOrderList(req *types.UserOrderListReq, userinfo *auth.UserInfo) (resp *basic.Response) {
	// 返回值必须调用Set重新返回, resp可以空指针调用 resp.SetStatus(basic.CodeOK, data)
	// userinfo 传入值时, 一定不为null

	// size := req.Size

	// if size > 0 {
	// 	size = int64(image.GetCurrentSize(uint32(size)))
	// }

	// orderDetailModel := gmodel.NewFsOrderDetailModel(l.svcCtx.MysqlConn)
	// orderDetailTemplateModel := gmodel.NewFsOrderDetailTemplateModel(l.svcCtx.MysqlConn)
	// fsProductDesignModel := gmodel.NewFsProductDesignModel(l.svcCtx.MysqlConn)
	// orderModel := gmodel.NewFsOrderModel(l.svcCtx.MysqlConn)
	// rowBuilder := orderModel.RowSelectBuilder(nil)
	// if userinfo == nil || userinfo.UserId == 0 {
	// 	return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "order not found")
	// }

	// // 查询条件
	// var page = req.Page
	// var pageSize = req.PageSize
	// var listRes []*gmodel.FsOrderRel
	// rowBuilder = rowBuilder.Where("user_id =?", userinfo.UserId).Where("status <> ?", constants.STATUS_NEW_NOT_PAY).Where("status <>?", constants.STATUS_NEW_DELETE)

	// // 根据时间来查询不同范围的订单
	// switch req.Time {
	// case 1:
	// 	rowBuilder = rowBuilder.Where("ctime >?", time.Now().UTC().AddDate(0, -1, 0).Unix())
	// case 2:
	// 	rowBuilder = rowBuilder.Where("ctime >?", time.Now().UTC().AddDate(0, -3, 0).Unix())
	// case 3:
	// 	rowBuilder = rowBuilder.Where("ctime >?", time.Now().UTC().AddDate(0, -6, 0).Unix())
	// case 4:
	// 	rowBuilder = rowBuilder.Where("ctime >?", time.Now().UTC().AddDate(-1, 0, 0).Unix())
	// default:
	// }

	// //按照订单状态查询不同的订单
	// if req.Status != -1 {
	// 	switch req.Status {
	// 	case 1:
	// 		rowBuilder = rowBuilder.Where("status in ?", [3]constants.Order{constants.STATUS_NEW_PART_PAY, constants.STATUS_NEW_PAY_COMPLETED, constants.STATUS_NEW_SURE})
	// 	case 2:
	// 		rowBuilder = rowBuilder.Where("status in ?", [2]constants.Order{constants.STATUS_NEW_PRODUTING, constants.STATUS_NEW_PRODUT_COMPLETED})
	// 	case 3:
	// 		rowBuilder = rowBuilder.Where("status in ?", [2]constants.Order{constants.STATUS_NEW_DELIVER, constants.STATUS_NEW_UPS})
	// 	case 4:
	// 		rowBuilder = rowBuilder.Where("status =?", constants.STATUS_NEW_ARRIVAL)
	// 	case 5:
	// 		rowBuilder = rowBuilder.Where("status =?", constants.STATUS_NEW_COMPLETED).Where("delivery_method =?", constants.DELIVERY_METHOD_ADDRESS)
	// 	case 7:
	// 		rowBuilder = rowBuilder.Where("status in ?", [3]constants.Order{constants.STATUS_NEW_CANCEL, constants.STATUS_NEW_REFUNDED, constants.STATUS_NEW_REFUNDING})
	// 	case 8:
	// 		rowBuilder = rowBuilder.Where("status =?", constants.STATUS_NEW_COMPLETED).Where("delivery_method =?", constants.DELIVERY_METHOD_CLOUD)
	// 	}
	// }

	// // 查询总数
	// total, err := orderModel.FindCount(l.ctx, rowBuilder, nil)
	// if err != nil {
	// 	if errors.Is(err, gorm.ErrRecordNotFound) {
	// 		return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "order not found")
	// 	}
	// 	logx.Error(err)
	// 	return resp.SetStatusWithMessage(basic.CodeServiceErr, "failed to get order info")
	// }

	// // 查询数据
	// if total > 0 {
	// 	rowBuilder = rowBuilder.Preload("FsOrderAffiliateInfo").Preload("FsOrderDetails", func(dbPreload *gorm.DB) *gorm.DB {
	// 		return dbPreload.Table(orderDetailModel.TableName()).Preload("FsOrderDetailTemplateInfo", func(dbPreload *gorm.DB) *gorm.DB {
	// 			return dbPreload.Table(orderDetailTemplateModel.TableName()).Preload("FsProductDesignInfo", func(dbPreload *gorm.DB) *gorm.DB {
	// 				return dbPreload.Table(fsProductDesignModel.TableName()).Preload("OptionData").Preload("TemplateData")
	// 			}).Preload("FsProductSizeInfo")
	// 		}).Preload("FsProductInfo")
	// 	})
	// 	listRes, err = orderModel.FindPageListByPage(l.ctx, rowBuilder, &page, &pageSize, nil, "")
	// }

	// if err != nil {
	// 	if errors.Is(err, gorm.ErrRecordNotFound) {
	// 		return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "order not found")
	// 	}
	// 	logx.Error(err)
	// 	return resp.SetStatusWithMessage(basic.CodeServiceErr, "failed to get order info")
	// }
	// listResLen := len(listRes)

	// var respList []types.Items
	// if listResLen > 0 {
	// 	// 获取订单时间配置
	// 	orderTimeConfig, err := configs.GetOrderTimeConfig(l.ctx, l.svcCtx.MysqlConn)
	// 	if err != nil {
	// 		return resp.SetStatusWithMessage(basic.CodeServiceErr, "failed to get config time info")
	// 	}

	// 	// 数据处理
	// 	for _, item := range listRes {
	// 		var pbData types.Items
	// 		pbData.ID = item.Id
	// 		pbData.Sn = *item.Sn
	// 		pbData.UserID = *item.UserId
	// 		pbData.TotalAmount = *item.TotalAmount
	// 		pbData.Ctime = format.TimeIntToFormat(*item.Ctime)
	// 		pbData.Status = *item.Status
	// 		pbData.DeliveryMethod = *item.DeliveryMethod
	// 		pbData.TsTime = format.TimeToFormat(*item.TsTime)
	// 		pbData.IsPayCompleted = *item.IsPayCompleted
	// 		pbData.DeliverSn = *item.DeliverSn

	// 		var pcsBox int64
	// 		var pcs int64
	// 		var productList []types.Product

	// 		var surplusAt int64

	// 		//如果是部分支付状态,那么取消订单倒计时2天
	// 		if *item.Status == int64(constants.STATUS_NEW_PART_PAY) {
	// 			surplusAt = (*item.Ctime + int64(constants.CANCLE_ORDER_EXPIRE)) - time.Now().UTC().Unix()
	// 			if surplusAt < 0 {
	// 				surplusAt = 0
	// 			}
	// 		}

	// 		fsOrderAffiliateInfo := item.FsOrderAffiliateInfo

	// 		var sureTime int64
	// 		var productTime int64
	// 		var ProductEndtime int64
	// 		var deliverTime int64
	// 		var upsDeliverTime int64
	// 		var upsTime int64
	// 		var arrivalTime int64
	// 		var recevieTime int64
	// 		if fsOrderAffiliateInfo.Id > 0 {
	// 			sureTime = *fsOrderAffiliateInfo.SureTime
	// 			productTime = *fsOrderAffiliateInfo.ProductTime
	// 			ProductEndtime = *fsOrderAffiliateInfo.ProductEndtime
	// 			deliverTime = *fsOrderAffiliateInfo.DeliverTime
	// 			upsDeliverTime = *fsOrderAffiliateInfo.UpsDeliverTime
	// 			upsTime = *fsOrderAffiliateInfo.UpsTime
	// 			arrivalTime = *fsOrderAffiliateInfo.ArrivalTime
	// 			recevieTime = *fsOrderAffiliateInfo.RecevieTime
	// 		}

	// 		var getOrderStatusAndLogisticsReq = order.GetOrderStatusAndLogisticsReq{
	// 			OrderStatus:    constants.Order(*item.Status),
	// 			DeliveryMethod: constants.DeliveryMethod(*item.DeliveryMethod),
	// 			IsPayCompleted: *item.IsAllProductCompleted,
	// 			OrderCtime:     *item.Ctime,

	// 			SureTime:       sureTime,
	// 			ProductTime:    productTime,
	// 			ProductEndtime: ProductEndtime,
	// 			DeliverTime:    deliverTime,
	// 			UpsDeliverTime: upsDeliverTime,
	// 			UpsTime:        upsTime,
	// 			ArrivalTime:    arrivalTime,
	// 			RecevieTime:    recevieTime,

	// 			WebSetTimeInfo: orderTimeConfig,
	// 		}

	// 		statusAndLogisticsRes := order.GetOrderStatusAndLogistics(getOrderStatusAndLogisticsReq)

	// 		// 流程控制
	// 		var statusTime []types.StatusTime
	// 		for _, itemTimes := range statusAndLogisticsRes.Times {
	// 			statusTime = append(statusTime, types.StatusTime{
	// 				Key:  itemTimes.Key,
	// 				Time: itemTimes.Time,
	// 			})
	// 		}
	// 		pbData.StatusTimes = statusTime
	// 		pbData.LogisticsStatus = int64(statusAndLogisticsRes.LogisticsStatus)
	// 		pbData.Status = int64(statusAndLogisticsRes.OrderStatus)

	// 		var isStopMax int64
	// 		if len(item.FsOrderDetails) > 0 {
	// 			for _, fsOrderDetailItem := range item.FsOrderDetails {

	// 				fsOrderDetailBuyNum := *fsOrderDetailItem.FsOrderDetail.BuyNum
	// 				fsOrderDetailEachBoxNum := *fsOrderDetailItem.FsOrderDetailTemplateInfo.EachBoxNum
	// 				pcs = pcs + fsOrderDetailBuyNum
	// 				pcsBoxNum := fsOrderDetailBuyNum / fsOrderDetailEachBoxNum
	// 				var csBoxNumF int64
	// 				if (fsOrderDetailBuyNum % fsOrderDetailEachBoxNum) > 0 {
	// 					csBoxNumF = 1
	// 				}
	// 				pcsBox = pcsBox + pcsBoxNum + csBoxNumF

	// 				productCover := *fsOrderDetailItem.Cover
	// 				// 尺寸
	// 				if size >= 200 {
	// 					coverArr := strings.Split(*fsOrderDetailItem.Cover, ".")
	// 					if len(coverArr) < 2 {
	// 						return resp.SetStatusWithMessage(basic.CodeServiceErr, "cover split slice item count is less than 2")
	// 					}
	// 					productCover = fmt.Sprintf("%s_%d.%s", coverArr[0], req.Size, coverArr[1])
	// 				}

	// 				// 判断stop
	// 				var isStop int64
	// 				if fsOrderDetailItem.FsOrderDetailTemplateInfo.FsProductDesignInfo.OptionData.Id != 0 {
	// 					// 尺寸或者模板下架
	// 					if fsOrderDetailItem.FsOrderDetailTemplateInfo.FsProductDesignInfo.Id != 0 {
	// 						isStop = 1
	// 					} else {
	// 						isStop = 3
	// 					}
	// 				} else {
	// 					if fsOrderDetailItem.FsOrderDetailTemplateInfo.FsProductDesignInfo.Id != 0 {
	// 						isStop = 1
	// 					}
	// 				}

	// 				// 判断产品是否下架
	// 				if *fsOrderDetailItem.FsProductInfo.IsShelf == 0 || *fsOrderDetailItem.FsProductInfo.IsDel == 1 {
	// 					isStop = 2
	// 				}
	// 				if isStop > isStopMax {
	// 					isStopMax = isStop
	// 				}

	// 				productList = append(productList, types.Product{
	// 					Cover:                 productCover,
	// 					Fitting:               *fsOrderDetailItem.OptionalTitle,
	// 					OptionPrice:           *fsOrderDetailItem.OptionPrice,
	// 					OrderDetailTemplateId: *fsOrderDetailItem.OrderDetailTemplateId,
	// 					OrderId:               *fsOrderDetailItem.OrderId,
	// 					Pcs:                   fsOrderDetailBuyNum,
	// 					PcsBox:                pcsBox,
	// 					Price:                 *fsOrderDetailItem.FsOrderDetail.Amount,
	// 					ProductId:             *fsOrderDetailItem.OptionPrice,
	// 					Title:                 *fsOrderDetailItem.FsProductInfo.Title,
	// 					Size:                  *fsOrderDetailItem.FsOrderDetailTemplateInfo.FsProductSizeInfo.Capacity,
	// 					IsStop:                isStop,
	// 				})
	// 			}
	// 			pbData.ProductList = productList
	// 		}

	// 		pbData.IsStop = isStopMax
	// 		pbData.PcsBox = pcsBox
	// 		pbData.Pcs = pcs
	// 		pbData.SurplusAt = surplusAt
	// 		pbData.Deposit = *item.TotalAmount / 2
	// 		pbData.Remaining = pbData.Deposit
	// 		respList = append(respList, pbData)
	// 	}

	// }

	// return resp.SetStatusWithMessage(basic.CodeOK, "success", types.UserOrderListRsp{
	// 	Items: respList,
	// 	Meta: types.Meta{
	// 		TotalCount:  total,
	// 		PageCount:   int64(math.Ceil(float64(total) / float64(pageSize))),
	// 		CurrentPage: int(page),
	// 		PerPage:     int(pageSize),
	// 	},
	// })
	return resp.SetStatusWithMessage(basic.CodeOK, "success")
}