package adminkindboxservice

import (
	"context"

	entity "git.gocasts.ir/ebhomengo/niki/entity"
	param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box"
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
)

func (s Service) AddBatchKindBox(ctx context.Context, req param.AddKindBoxRequest) (param.AddKindBoxResponse, error) {
	const op = "adminkindboxservice.AddKindBox"

	kindBoxes := make([]entity.KindBox, 0)
	for i := 0; i < int(req.CountAccepted); i++ {
		kb := entity.KindBox{
			KindBoxReqID:       req.KindBoxReqID,
			BenefactorID:       req.BenefactorID,
			KindBoxType:        req.Type,
			DeliverReferTimeID: req.DeliverReferTimeID,
			DeliverReferDate:   req.DeliverReferDate,
			DeliverAddressID:   req.DeliverAddressID,
			DeliveredAt:        req.DeliveredAt,
			SenderAgentID:      req.SenderAgentID,
			Status:             entity.KindBoxDeliveredStatus,
		}
		if i < len(req.SerialNumbers) {
			kb.SerialNumber = req.SerialNumbers[i]
		}
		kindBoxes = append(kindBoxes, kb)
	}
	aErr := s.repo.AddBatchKindBox(ctx, kindBoxes)
	if aErr != nil {
		return param.AddKindBoxResponse{}, richerror.New(op).WithErr(aErr).WithKind(richerror.KindUnexpected)
	}

	return param.AddKindBoxResponse{}, nil
}