package models

import (
	"errors"

	"github.com/jinzhu/gorm"
)

// DeviceStatusDatas DeviceStatusData 切片类型
type DeviceStatusDatas []DeviceStatusData

// DeviceStatusInfo DeviceStatus对象
type DeviceStatus struct {
	gorm.Model
	RecordID       string            `gorm:"primary_key;column:record_id;size:32;index" json:"record_id"`
	DeviceTypeId   string            `gorm:"column:device_type_id;size:32;index" json:"device_type_id"` // 设备类型id
	DeviceTypeCode string            `gorm:"column:device_type_code;size:100" json:"device_type_code"`  // 设备类型code
	Desc           string            `gorm:"column:desc;size:500" json:"desc"`                          // 描述
	Name           string            `gorm:"column:name;size:200" json:"name"`                          // 状态字段名称
	Label          string            `gorm:"column:label;size:200" json:"label"`                        // 状态字段标签
	Type           string            `gorm:"column:type;size:100" json:"type"`                          // 状态字段类型
	Unit           string            `gorm:"column:unit;size:50" json:"unit"`                           // 单位
	FieldType      int               `gorm:"column:field_type" json:"field_type"`                       // 数据类型
	Data           DeviceStatusDatas `gorm:"foreignkey:StatusID" json:"data"`                           // 状态数据
}

// TableName 表名
func (DeviceStatus) TableName() string {
	return "device_status"
}

// Validate 验证
func (a *DeviceStatus) Validate() error {
	if a.Name == "" {
		return errors.New("非法参数:[Name]")
	}
	if a.DeviceTypeId == "" {
		return errors.New("非法参数:[DeviceTypeId]")
	}
	return nil
}

// DeviceStatusData DeviceStatusData对象
type DeviceStatusData struct {
	gorm.Model
	RecordID string `gorm:"primary_key;column:record_id;size:32;index" json:"record_id"`
	StatusID string `gorm:"column:status_id;size:32;index" json:"status_id"` // 状态id
	Name     string `gorm:"column:name;size:200" json:"name"`                // 名称
	Value    string `gorm:"column:value;size:500" json:"value"`              // 值
}

// TableName 表名
func (DeviceStatusData) TableName() string {
	return "device_status_data"
}

// Validate 验证
func (a *DeviceStatusData) Validate() error {
	if a.StatusID == "" {
		return errors.New("非法参数:[StatusID]")
	}
	return nil
}
