// Package swagger provides primitives to interact with the openapi HTTP API.
//
// Code generated by github.com/deepmap/oapi-codegen/v2 version v2.0.0 DO NOT EDIT.
package swagger

import (
	"time"
)

const (
	BearerScopes = "Bearer.Scopes"
)

// Defines values for AccountStatus.
const (
	Nko AccountStatus = "nko"
	No  AccountStatus = "no"
	Org AccountStatus = "org"
)

// Defines values for PaymentType.
const (
	PaymentTypeAlfabank     PaymentType = "alfabank"
	PaymentTypeB2bSberbank  PaymentType = "b2bSberbank"
	PaymentTypeBankCard     PaymentType = "bankCard"
	PaymentTypeCash         PaymentType = "cash"
	PaymentTypeInstallments PaymentType = "installments"
	PaymentTypeMobile       PaymentType = "mobile"
	PaymentTypeQiwi         PaymentType = "qiwi"
	PaymentTypeSberbank     PaymentType = "sberbank"
	PaymentTypeSbp          PaymentType = "sbp"
	PaymentTypeTinkoffBank  PaymentType = "tinkoffBank"
	PaymentTypeYoomoney     PaymentType = "yoomoney"
)

// Account defines model for Account.
type Account struct {
	Id        string        `json:"_id"`
	Cart      []string      `json:"cart"`
	CreatedAt time.Time     `json:"createdAt"`
	DeletedAt *time.Time    `json:"deletedAt,omitempty"`
	IsDeleted *bool         `json:"isDeleted,omitempty"`
	Name      Name          `json:"name"`
	Status    AccountStatus `json:"status"`
	UpdatedAt time.Time     `json:"updatedAt"`
	UserId    string        `json:"userId"`
	Wallet    Wallet        `json:"wallet"`
}

// AccountStatus defines model for AccountStatus.
type AccountStatus string

// BankCard defines model for BankCard.
type BankCard struct {
	// Cardholder Имя владельца карты
	Cardholder *string `json:"cardholder,omitempty"`

	// Csc Код CVC2 или CVV2, 3 или 4 символа, печатается на обратной стороне карты
	Csc *string `json:"csc,omitempty"`

	// ExpiryMonth Месяц истечения срока карты (MM)
	ExpiryMonth string `json:"expiryMonth"`

	// ExpiryYear Год истечения срока карты (YYYY)
	ExpiryYear string `json:"expiryYear"`

	// Number Номер карты
	Number string `json:"number"`
}

// Error defines model for Error.
type Error struct {
	Message    string `json:"message"`
	StatusCode *int64 `json:"statusCode,omitempty"`
}

// History defines model for History.
type History struct {
	Comment   string     `json:"comment"`
	CreatedAt time.Time  `json:"createdAt"`
	DeletedAt *time.Time `json:"deletedAt,omitempty"`
	Id        string     `json:"id"`
	IsDeleted *bool      `json:"isDeleted,omitempty"`

	// RawDetails Я пока не могу предположить, какие будут фильтры по истории, поэтому предлагаю в это  поле просто класть строку с json.  Ибо для каждого типа записи она своя.
	RawDetails *string   `json:"rawDetails,omitempty"`
	Type       string    `json:"type"`
	UpdatedAt  time.Time `json:"updatedAt"`
	UserId     string    `json:"userId"`
}

// Name defines model for Name.
type Name struct {
	Firstname  *string `json:"firstname,omitempty"`
	Middlename *string `json:"middlename,omitempty"`
	Orgname    *string `json:"orgname,omitempty"`
	Secondname *string `json:"secondname,omitempty"`
}

// PaymentType defines model for PaymentType.
type PaymentType string

// TariffID defines model for TariffID.
type TariffID struct {
	ID *string `json:"ID,omitempty"`
}

// Wallet defines model for Wallet.
type Wallet struct {
	// Cash Сумма money переведённая на текущий курс
	Cash int64 `json:"cash"`

	// Currency Текущий курс валюты
	Currency string `json:"currency"`

	// Money Деньги на счету в копейках. Чтобы при перессчётах не возникало денег изниоткуда. фиксируемся к одной валюте, она будет внутренней, никому её не покажем
	Money int64 `json:"money"`

	// PurchasesAmount Общая сумма денег, которые внёс пользователь
	PurchasesAmount int64 `json:"purchasesAmount"`

	// Spent Общая сумма потраченных денег за всё время существования аккаунта
	Spent int64 `json:"spent"`
}

// SetAccountVerificationStatusJSONBody defines parameters for SetAccountVerificationStatus.
type SetAccountVerificationStatusJSONBody struct {
	Status *AccountStatus `json:"status,omitempty"`
}

// PaginationAccountsParams defines parameters for PaginationAccounts.
type PaginationAccountsParams struct {
	// Page Номер страницы, начиная с 1
	Page *int `form:"page,omitempty" json:"page,omitempty"`

	// Limit размер страницы
	Limit *int `form:"limit,omitempty" json:"limit,omitempty"`
}

// RemoveFromCartParams defines parameters for RemoveFromCart.
type RemoveFromCartParams struct {
	Id string `form:"id" json:"id"`
}

// Add2cartParams defines parameters for Add2cart.
type Add2cartParams struct {
	Id string `form:"id" json:"id"`
}

// UpdateCurrenciesJSONBody defines parameters for UpdateCurrencies.
type UpdateCurrenciesJSONBody = []string

// GetHistoryParams defines parameters for GetHistory.
type GetHistoryParams struct {
	// Page Номер страницы, начиная с 1
	Page *int `form:"page,omitempty" json:"page,omitempty"`

	// Limit Размер страницы
	Limit *int `form:"limit,omitempty" json:"limit,omitempty"`

	// Type Тип события
	Type *string `form:"type,omitempty" json:"type,omitempty"`

	// AccountID Идентификатор аккаунта. Если не указан, будет использоваться идентификатор из токена.
	AccountID *string `form:"accountID,omitempty" json:"accountID,omitempty"`
}

// GetRecentTariffsJSONBody defines parameters for GetRecentTariffs.
type GetRecentTariffsJSONBody struct {
	Id string `json:"id"`
}

// CalculateLTVJSONBody defines parameters for CalculateLTV.
type CalculateLTVJSONBody struct {
	// From Начальная дата в формате Unix timestamp. Если 0, устанавливает начало истории.
	From int64 `json:"from"`

	// To Конечная дата в формате Unix timestamp. Если 0, устанавливает текущее время.
	To int64 `json:"to"`
}

// SendReportJSONBody defines parameters for SendReport.
type SendReportJSONBody struct {
	Id string `json:"id"`
}

// ChangeCurrencyJSONBody defines parameters for ChangeCurrency.
type ChangeCurrencyJSONBody struct {
	Currency string `json:"currency"`
}

// RequestMoneyJSONBody defines parameters for RequestMoney.
type RequestMoneyJSONBody struct {
	Amount   int       `json:"amount"`
	BankCard *BankCard `json:"bankCard,omitempty"`

	// Currency ISO-4217 формат
	Currency    string      `json:"currency"`
	Login       *string     `json:"login,omitempty"`
	PhoneNumber *string     `json:"phoneNumber,omitempty"`
	ReturnUrl   *string     `json:"returnUrl,omitempty"`
	Type        PaymentType `json:"type"`
}

// ChangeAccountJSONRequestBody defines body for ChangeAccount for application/json ContentType.
type ChangeAccountJSONRequestBody = Name

// SetAccountVerificationStatusJSONRequestBody defines body for SetAccountVerificationStatus for application/json ContentType.
type SetAccountVerificationStatusJSONRequestBody SetAccountVerificationStatusJSONBody

// UpdateCurrenciesJSONRequestBody defines body for UpdateCurrencies for application/json ContentType.
type UpdateCurrenciesJSONRequestBody = UpdateCurrenciesJSONBody

// CalculateLTVJSONRequestBody defines body for CalculateLTV for application/json ContentType.
type CalculateLTVJSONRequestBody CalculateLTVJSONBody

// GetRecentTariffsJSONRequestBody defines body for GetRecentTariffs for application/json ContentType.
type GetRecentTariffsJSONRequestBody GetRecentTariffsJSONBody

// SendReportJSONRequestBody defines body for SendReport for application/json ContentType.
type SendReportJSONRequestBody SendReportJSONBody

// ChangeCurrencyJSONRequestBody defines body for ChangeCurrency for application/json ContentType.
type ChangeCurrencyJSONRequestBody ChangeCurrencyJSONBody

// RequestMoneyJSONRequestBody defines body for RequestMoney for application/json ContentType.
type RequestMoneyJSONRequestBody RequestMoneyJSONBody
