package mservice

import "github.com/tech/sendico/pkg/merrors"

type Type = string

const (
	Accounts            Type = "accounts"               // Represents user accounts in the system
	Verification        Type = "verification"           // Represents verification code flows
	Amplitude           Type = "amplitude"              // Represents analytics integration with Amplitude
	Discovery           Type = "discovery"              // Represents service discovery registry
	Site                Type = "site"                   // Represents public site endpoints
	Changes             Type = "changes"                // Tracks changes made to resources
	Clients             Type = "clients"                // Represents client information
	ChainGateway        Type = "chain_gateway"          // Represents chain gateway microservice
	MntxGateway         Type = "mcards_gateway"         // Represents Monetix gateway microservice
	PaymentGateway      Type = "payment_gateway"        // Represents payment gateway microservice
	FXOracle            Type = "fx_oracle"              // Represents FX oracle microservice
	FXIngestor          Type = "fx_ingestor"            // Represents FX ingestor microservice
	FeePlans            Type = "fee_plans"              // Represents fee plans microservice
	BillingDocuments    Type = "billing_documents"      // Represents billing documents microservice
	BillingFees         Type = "billing_fees"           // Represents billing fees microservice
	FilterProjects      Type = "filter_projects"        // Represents comments on tasks or other resources
	Invitations         Type = "invitations"            // Represents invitations sent to users
	Invoices            Type = "invoices"               // Represents invoices
	Logo                Type = "logo"                   // Represents logos for organizations or projects
	Ledger              Type = "ledger"                 // Represents ledger microservice
	LedgerAccounts      Type = "ledger_accounts"        // Represents ledger accounts microservice
	LedgerBalances      Type = "ledger_balances"        // Represents ledger account balances microservice
	LedgerEntries       Type = "ledger_journal_entries" // Represents ledger journal entries microservice
	LedgerOutbox        Type = "ledger_outbox"          // Represents ledger outbox microservice
	LedgerParties       Type = "ledger_parties"         // Represents ledger account owner parties microservice
	LedgerPlines        Type = "ledger_posting_lines"   // Represents ledger journal posting lines microservice
	PaymentOrchestrator Type = "payment_orchestrator"   // Represents payment orchestration microservice
	PaymentQuotation    Type = "payment_quotation"      // Represents payment quotation microservice
	ChainAssets         Type = "chain_assets"           // Represents managed chain assets
	ChainWallets        Type = "chain_wallets"          // Represents managed chain wallets
	ChainWalletBalances Type = "chain_wallet_balances"  // Represents managed chain wallet balances
	ChainTransfers      Type = "chain_transfers"        // Represents chain transfers
	ChainDeposits       Type = "chain_deposits"         // Represents chain deposits
	Callbacks           Type = "callbacks"              // Represents webhook callback subscriptions
	ChSettle            Type = "chsettle_gateway"       // Represents chimera settlement gateway
	Notifications       Type = "notifications"          // Represents notifications sent to users
	Organizations       Type = "organizations"          // Represents organizations in the system
	Payments            Type = "payments"               // Represents payments service
	PaymentRoutes       Type = "payment_routes"         // Represents payment routing definitions
	PaymentMethods      Type = "payment_methods"        // Represents payment methods service
	Permissions         Type = "permissions"            // Represents permissiosns service
	Policies            Type = "policies"               // Represents access control policies
	PolicyAssignements  Type = "policy_assignments"     // Represents policy assignments database
	Recipients          Type = "recipients"             // Represents payment recipients
	RefreshTokens       Type = "refresh_tokens"         // Represents refresh tokens for authentication
	Roles               Type = "roles"                  // Represents roles in access control
	Storage             Type = "storage"                // Represents statuses of tasks or projects
	TgSettle            Type = "tgsettle_gateway"       // Represents tg settlement gateway
	TronGateway         Type = "tron_gateway"           // Represents tron gateway microservice
	Tenants             Type = "tenants"                // Represents tenants managed in the system
	VerificationTokens  Type = "verification_tokens"    //Represents verification tokens managed in the system
	Wallets             Type = "wallets"                // Represents workflows for tasks or projects
	WalletRoutes        Type = "wallet_routes"          // Represents authoritative chain wallet gateway routing
	Workflows           Type = "workflows"              // Represents workflows for tasks or projects
)

func StringToSType(s string) (Type, error) {
	switch s {
	case Accounts, Verification, Amplitude, Site, Changes, Clients, ChainGateway, ChainWallets, WalletRoutes, ChainWalletBalances,
		ChainTransfers, ChainDeposits, Callbacks, MntxGateway, PaymentGateway, FXOracle, FeePlans, BillingDocuments, FilterProjects, Invitations, Invoices, Logo, Ledger,
		LedgerAccounts, LedgerBalances, LedgerEntries, LedgerOutbox, LedgerParties, LedgerPlines, Notifications,
		Organizations, Payments, PaymentRoutes, PaymentOrchestrator, PaymentMethods, Permissions, Policies, PolicyAssignements,
		Recipients, RefreshTokens, Roles, Storage, Tenants, Workflows, Discovery, ChSettle:
		return s, nil
	default:
		return "", merrors.InvalidArgument("invalid service type", s)
	}
}
