package benefactorkindboxreqmock

import (
	"context"
	"fmt"
	"time"

	"git.gocasts.ir/ebhomengo/niki/entity"
)

const RepoErr = "record not found"

type DefaultKindBoxReqTest struct {
	BenefactorID   uint
	KindBoxType    entity.KindBoxType
	AddressID      uint
	ReferDate      time.Time
	CountRequested uint
}

func DefaultKindBoxReq() DefaultKindBoxReqTest {
	return DefaultKindBoxReqTest{
		BenefactorID:   1,
		KindBoxType:    1,
		AddressID:      1,
		ReferDate:      time.Now(),
		CountRequested: 1,
	}
}

type MockRepository struct {
	kindBoxReqs []entity.KindBoxReq
	hasErr      bool
}

func NewMockRepository(hasErr bool) *MockRepository {
	var kindBoxReqs []entity.KindBoxReq
	DefaultKindBoxReq := DefaultKindBoxReq()

	kindBoxReqs = append(kindBoxReqs, entity.KindBoxReq{
		BenefactorID:   DefaultKindBoxReq.BenefactorID,
		AddressID:      DefaultKindBoxReq.AddressID,
		KindBoxType:    DefaultKindBoxReq.KindBoxType,
		ReferDate:      DefaultKindBoxReq.ReferDate,
		CountRequested: DefaultKindBoxReq.CountRequested,
		Status:         entity.KindBoxReqPendingStatus,
	})

	return &MockRepository{
		kindBoxReqs: kindBoxReqs,
		hasErr:      hasErr,
	}
}

// nolint
func (m *MockRepository) AddKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) (entity.KindBoxReq, error) {
	if m.hasErr {
		return entity.KindBoxReq{}, fmt.Errorf(RepoErr)
	}

	kindBoxReq.ID = 1
	m.kindBoxReqs = append(m.kindBoxReqs, kindBoxReq)

	return kindBoxReq, nil
}