package nsdadapter

import "fmt"

// PackageType — тип пакета ЭДО НРД. Используется при отправке через ИШ.
type PackageType string

// Известные типы пакетов M2M и связанных сервисных сообщений.
const (
	PackageM2MTransferRequest  PackageType = "#M2MTR"
	PackageM2MTransferDecision PackageType = "#M2MTD"
	PackageM2MTransferError    PackageType = "#M2MER"
	PackageSUBBR               PackageType = "SUBBR"
	PackageSUBER               PackageType = "SUBER"
	PackageSUB16               PackageType = "SUB16"
	PackageAssetsInvestment    PackageType = "Assets_investment"
)

// MessageKind — внутренний классификатор доменного M2M-сообщения,
// который мы хотим отправить в НРД.
type MessageKind string

const (
	KindTransferRequest  MessageKind = "transfer_request"
	KindTransferDecision MessageKind = "transfer_decision"
	KindTransferResponse MessageKind = "transfer_response"
	KindHandbookRequest  MessageKind = "handbook_request"
	KindParticipantForm  MessageKind = "participant_form"
)

// RouteToPackageType подбирает PackageType ЭДО для нашего MessageKind.
func RouteToPackageType(kind MessageKind) (PackageType, error) {
	switch kind {
	case KindTransferRequest:
		return PackageM2MTransferRequest, nil
	case KindTransferDecision:
		return PackageM2MTransferDecision, nil
	case KindTransferResponse:
		return PackageM2MTransferError, nil
	case KindHandbookRequest:
		return PackageAssetsInvestment, nil
	case KindParticipantForm:
		return PackageAssetsInvestment, nil
	}
	return "", fmt.Errorf("nsdadapter: не задан PackageType для kind=%q", kind)
}

// IncomingPackageKinds — типы входящих пакетов, которые нужно опрашивать
// и обрабатывать на нашей стороне.
func IncomingPackageKinds() []PackageType {
	return []PackageType{
		PackageM2MTransferDecision,
		PackageM2MTransferError,
		PackageSUBBR,
		PackageSUBER,
		PackageSUB16,
	}
}
