package model

// Sirius structure
type Sirius struct {
	Device      `json:"device"`
	Zone        `json:"zone"`
	ZoneGroup   `json:"zone_group"`
	Input       `json:"input"`
	Output      `json:"output"`
	Reader      `json:"reader"`
	Channel     `json:"channel"`
	AccessGroup `json:"access_group"`
	User        `json:"user"`
	Script      `json:"script"`
	Program     `json:"program"`
	Controller  `json:"controller"`
}

// Device
type Device struct {
	Keys []string        `json:"keys"`
	Rows [][]interface{} `json:"rows"`
}

func (z *Device) Get() []DeviceRows {
	var zr []DeviceRows
	for _, z := range z.Rows {
		i, b, s, _ := InterToArray(z)

		zz := DeviceRows{
			DevID: i[0],
			I2:    i[1],
			B1:    b[0],
			Addr:  i[2],
			I4:    i[3],
			Type:  i[4],
			I6:    i[5],
			I7:    i[6],
			I8:    i[7],
			I9:    i[8],
			Name:  s[0],
		}
		zr = append(zr, zz)
	}
	return zr
}

// Type-40(КДЛС-С) Type-81(КДЛ-2И)
type DeviceRows struct {
	DevID   int64
	I2      int64
	B1      bool
	Addr    int64
	I4      int64
	Type    int64
	I6      int64
	I7      int64
	I8      int64
	I9      int64
	IntArr1 []int64
	IntArr2 []int64
	Name    string
}

// Zone
type Zone struct {
	Keys []string        `json:"keys"`
	Rows [][]interface{} `json:"rows"`
}

func (z *Zone) Get() []ZoneRows {
	var zr []ZoneRows
	for _, z := range z.Rows {
		i, b, s, _ := InterToArray(z)

		zz := ZoneRows{
			ZoneID: i[0],
			I1:     i[1],
			B1:     b[0],
			Number: i[2],
			I3:     i[3],
			I4:     i[4],
			B2:     b[1],
			B3:     b[2],
			Name:   s[0],
		}
		zr = append(zr, zz)
	}
	return zr
}

type ZoneRows struct {
	ZoneID int64
	I1     int64
	B1     bool
	Number int64
	I3     int64
	I4     int64
	B2     bool
	B3     bool
	Name   string
}

// ZoneGroup
type ZoneGroup struct {
	Keys []string      `json:"keys"`
	Rows []interface{} `json:"rows"`
}

// type ZoneGroupRows struct {
// 	Number int64
// 	I2     int64
// 	B1     bool
// 	I3     int64
// 	I4     int64
// 	IntArr []int64
// 	Name   string
// }

// Input
type Input struct {
	Keys []string        `json:"keys"`
	Rows [][]interface{} `json:"rows"`
}

func (z *Input) Get() []InputRows {
	var zr []InputRows
	for _, z := range z.Rows {
		i, _, s, _ := InterToArray(z)

		zz := InputRows{
			InputID: i[0],
			DevID:   i[1],
			AddrU:   i[2],
			I4:      i[3],
			I5:      i[4],
			I6:      i[5],
			ZoneID:  i[6],
			I8:      i[7],
			Name:    s[0],
		}
		zr = append(zr, zz)
	}
	return zr
}

type InputRows struct {
	InputID int64
	DevID   int64
	AddrU   int64
	I4      int64
	I5      int64
	I6      int64
	ZoneID  int64
	I8      int64
	Name    string
}

// Output
type Output struct {
	Keys []string      `json:"keys"`
	Rows []interface{} `json:"rows"`
}

// type OutputRows struct {
// 	Addr    int64
// 	I2      int64
// 	I3      int64
// 	I4      int64
// 	I5      int64
// 	I6      int64
// 	I7      int64
// 	I8      int64
// 	I9      int64
// 	I10     int64
// 	I11     int64
// 	IntArr1 []int64
// 	IntArr2 []int64
// 	I12     int64
// 	I13     int64
// 	Name    string
// }

// Reader
type Reader struct {
	Keys []string      `json:"keys"`
	Rows []interface{} `json:"rows"`
}

// type ReaderRows struct {
// 	I1      int64
// 	I2      int64
// 	I3      int64
// 	I4      int64
// 	I5      int64
// 	I6      int64
// 	IntArr1 []int64
// 	IntArr2 []int64
// 	Name    string
// }

// Channel
type Channel struct {
	Keys []string      `json:"keys"`
	Rows []interface{} `json:"rows"`
}

// type ChannelRows struct {
// 	I1   int64
// 	I2   int64
// 	I3   int64
// 	I4   int64
// 	I5   int64
// 	Name string
// }

// AccessGroup
type AccessGroup struct {
	Keys []string      `json:"keys"`
	Rows []interface{} `json:"rows"`
}

// type AccessGroupRows struct {
// 	I1      int64
// 	I2      int64
// 	IntArr1 []AccessGroupIntArray
// 	Name    string
// }

// type AccessGroupIntArray struct {
// 	I1 int64
// 	I2 int64
// }

// User
type User struct {
	Keys []string      `json:"keys"`
	Rows []interface{} `json:"rows"`
}

// Script
type Script struct {
	Keys []string      `json:"keys"`
	Rows []interface{} `json:"rows"`
}

// Program
type Program struct {
	Keys []string      `json:"keys"`
	Rows []interface{} `json:"rows"`
}

// Controller
type Controller struct {
	Keys []string      `json:"keys"`
	Rows []interface{} `json:"rows"`
}
