package parameters

// 7.2
type RIP struct {
	DEVID string // ID номер устройства
	BN    string // бортовой номер
	BID   string // гос. номер
	LN    string // Название линии
	DID   string // номер водительского удостоверения
	DNAME string // ФИО водителя
}

type VS struct {
	VIN string // VIN номер
}

type TIMEP struct {
	DATEM int    // формат даты
	TIMEM int    // формат времени
	TIMEZ string // часовой пояс
}

type ATP struct {
	GE int    // Синхронизация времени при помощи ГНСС
	NE int    // Синхронизация времени при помощи NTP
	NS string // NTP сервер для синхронизации
}

type SSP struct {
	UPT int // вкл/выкл
	DDS int // задержка перед выключением (при выборе зажигания)
	UH  int // час включения
	UM  int // минута включения
	US  int // минута включения
	DH  int // час выключения
	DM  int // минута выключения
	DS  int // секунда выключения
	CPM int // время выключения света
}

type SWUS struct {
	IOWP int    // Включение через IO
	GSWP int    // включение через G-сенсор
	TX   string // порог по X для G-сенсорa
	TY   string // порог по Y для G-сенсорa
	TZ   string // порог по Z для G-сенсорa
	RTWP int    // удаленное включение
	PHWP int    // включение через телефон
	PTWP int    // включение через SMS
}

type UMP struct {
	UIF []UIF // список юзеров
}

type UIF struct {
	UN string // username
	PW string // password
	UR int    // level
}

type SUBSTRNET struct {
	NEC     []NEC
	RLE     int
	SAE     int
	SM      int // Качество дополнительных потоков
	TOTALBW int // Максимальная скорость интернета
}

type NEC struct {
	AEN int // звук (вкл/выкл)
	VEN int // видео (вкл/выкл)
	BR  int // битрейт
	ECT int // кодировка
	FR  int // фреймрейт
	FT  int // тип кадров
	QLT int // качество трансляции
	RST int // разрешение
}

type DOSD struct {
	CHN []string // названия каналов
}

type AR struct {
	HDAE int   // Двойная запись на жесткий диск
	HID  int   // выбрать место для записи резервного потока
	RM   int   // режим записи резервного потока
	VEC  []VEC // параметры суб. потоков
}

type VEC struct {
	VEN int // видео (вкл/выкл)
	RST int // разрешение видеопотока
	ECT int // кодировка
	FR  int // фреймрейт
	QLT int // качество записи
	AEN int // звук (вкл/выкл)
	ALT int // качество видео при тревоге
}

type EOSD struct {
	COSD []COSD
	DE   int // показывать ли ID регистратора
	DTE  int
	DX   int
	DY   int
	GE   int // показывать ли GPS
	GX   int
	GY   int
	NE   int // показывать ли название канала
	NX   int
	NY   int
	SE   int // показывать ли скорость
	SX   int
	SY   int
	TE   int // показывать ли время
	TX   int
	TY   int
	VE   int // показывать ли номер устройства
	VX   int
	VY   int
	WME  int
}

type COSD struct {
	EN int
	F  int
	ID int
	L  int
	T  string
	TP int
	X  int
	Y  int
}

type IOP struct {
	EN  int
	AS  int
	EL  int
	SDT int
	APR APR
}

type SAP struct {
	EN  int
	AS  int
	WP  int
	SV  int
	AT  int
	APR APR
	UN  int
}

// 7.24.3
// Alarm processing parameters
type APR struct {
	AR ARR
	SS SS
	ET int
}

type ARR struct {
	CH int
	D  int
}

type SS struct {
	EN int
}

type PVLAS struct {
	EN  int
	AS  int
	SDT int
	CH  int
}

type PMDAS struct {
	EN  int
	AS  int
	SDT int
	CH  int
}

type DSM struct {
	DSMA  int
	DSMFE int
	RWFE  int
}

type GSP struct {
	LANT int // Язык системы
	GM   int // Система геопозиционирования
}

type ETHERNET struct {
	IPMODE  int // Тип IP
	PIP     PIP // Параметры IP
	DNSMODE int // Автоматическое получение DNS
	DNS     DNS // Параметры DNS
	KEYS    KEYS
}

type PIP struct {
	IPADDR  string // IP адрес
	SUBMASK string // Маска подсети
	GATEWAY string // Шлюз сети
}

type DNS struct {
	PDNS string // Основной DNS
	ADNS string // Дополнительный DNS
}

type KEYS struct {
	MAC string `json:"MAC,omitempty"` // MAC-адрес
	GV  uint   `json:"GV,omitempty"`  // GPS version
}

type WIFI struct {
	ENABLE     int    // Статус WIFI
	ESSID      string // Название точки доступа
	ECRYPTTYPE int    // Тип защиты WIFI
	PWD        string // Пароль от WIFI
	IPMODE     int    // Вид IP
	PIP        PIP    // Параметры IP
}

type M3G struct {
	M3M M3M // Управление активацией
	MP  MP  // Параметры первого модуля связи
	M4G MP  // Параметры второго модуля связи
}

type M3M struct {
	AT  int    // Режим работы модуля связи
	TN1 string // Номер активации 1
	TN2 string // Номер активации 2
	TN3 string // Номер активации 3
}

type MP struct {
	NM  int    // Выбор соединения
	APN string // APN
	UN  string // Логин
	PW  string // Пароль
}

type MCMS struct {
	M  int  // Битовая маска включенных серверов
	SP []SP // Параметры сервера
}

// 7.12.1
// Central server configuration
type SP struct {
	EN     int    // Флаг включения
	CP     int    // Протокол подключения
	NWT    int    // Способ подключения
	CS     string // Адрес сервера
	MS     string // Адрес медиасервера
	CPORT  int    // TCP-порт сервера
	MPORT  int    // TCP-порт медиасервера
	CUPORT int    // UDP-порт сервера
	MUPORT int    // UDP-порт медиасервера
}

// 7.28
// NVR remote device parameters
type REDEV struct {
	EN      int    // Флаг включения
	LOCK    int    // ???
	CHL     int    // Номер канала на устройстве
	RECHL   int    // ???
	ONLINE  int    // Доступно ли сейчас устройство
	RETYPE  int    // Тип устройства
	PROTYPE int    // Тип протокола
	IPTYPE  int    // Тип IP-адреса (IPv4/IPv6)
	CONTYPE int    // ???
	SW      int    // Источник поступаемого сигнала
	REPORT  int    // Порт камеры
	REIP    string // IP камеры
	ID      int    // Идентификатор камеры
	RENAME  string // Название устройства
	USER    string // Имя пользователя
	PWD     string // Пароль
	URL     string // ???
	CMDPORT string // ???
}

// 7.29
// Panel emergency alarm
type UAP struct {
	EN  int    // Флаг включения
	AS  int    // Уровень тревоги
	T   int    // ???
	VT  int    // ???
	UN  string // Имя тревоги
	UO  string // Имя тривоги на экране водителя
	APR APR    // Параметры обработки тревоги
	// AP  AP     // Параметры тревоги
	SDT int // ???
}

// 7.30
// Network monitoring status parameters
type PGDSM struct {
	PGPS PGPS `json:"PGPS,omitempty"`
	PDSM PDSM `json:"PDSM,omitempty"`
}

// 7.30.1
// GPS (position) status parameter
type PGPS struct {
	EN   uint // Enable
	MODE uint
	SEP  uint `json:"SEP,omitempty"`
	TM   uint `json:"TM,omitempty"`
	NUM  uint `json:"NUM,omitempty"`
}

// 7.30.2
// Device status parameter
type PDSM struct {
}

// 7.39.3.9
// Platform basic information
type PSI struct {
	CG CG `json:"CG,omitempty"`
}

// 7.39.3.8
// Total record information for call
type CG struct {
	ECL  uint // The maximum calling time
	ECML uint // The maximum calling time per month
	AS   uint // Terminal phonecall answering strategy
	AT   uint // Answer automatically when exceed time
}

type Setting struct {
	KEYS      KEYS      `json:"KEYS,omitempty"`
	RIP       RIP       `json:"RIP,omitempty"`
	TIMEP     TIMEP     `json:"TIMEP,omitempty"`
	ATP       ATP       `json:"ATP,omitempty"`
	SSP       SSP       `json:"SSP,omitempty"`
	GSP       GSP       `json:"GSP,omitempty"`
	UMP       UMP       `json:"UMP,omitempty"`
	ETHERNET  ETHERNET  `json:"ETHERNET,omitempty"`
	WIFI      WIFI      `json:"WIFI,omitempty"`
	M3G       M3G       `json:"M3G,omitempty"`
	MCMS      MCMS      `json:"MCMS,omitempty"`
	SUBSTRNET SUBSTRNET `json:"SUBSTRNET,omitempty"`
	DOSD      DOSD      `json:"DOSD,omitempty"`
	AR        AR        `json:"AR,omitempty"`
	MAIN      []VEC     `json:"MAIN,omitempty"`
	EOSD      []EOSD    `json:"EOSD,omitempty"`
	IOP       []IOP     `json:"IOP,omitempty"`
	SAP       SAP       `json:"SAP,omitempty"`
	REDEV     []REDEV   `json:"REDEV,omitempty"`
	UAP       UAP       `json:"UAP,omitempty"`
	PGDSM     PGDSM     `json:"PGDSM,omitempty"`
	PVLAS     PVLAS     `json:"PVLAS,omitempty"`
	PMDAS     PMDAS     `json:"PMDAS,omitempty"`
	VS        VS        `json:"VS,omitempty"`
	PSI       PSI       `json:"PSI,omitempty"`

	SWUS SWUS `json:"SWUS,omitempty"`
	// DSM  DSM  `json:"DSM,omitempty"`
}