package dao

import (
	"time"
)

// DeviceVendor 厂家
type DeviceVendor struct {
	ID          int       `gorm:"primary_key" json:"id"`                //编号
	VendorType  int       `gorm:"int" json:"vendorType"`                //类型:1-厂家名称,2-品牌,3-型号
	VendorValue string    `gorm:"type:varchar(200)" json:"vendorValue"` //值
	ParentId    int       `gorm:"type:int" json:"parentId"`             //父id,厂家为-1
	DeviceType  int       `gorm:"type:int" json:"deviceType"`           //设备类型
	TenantId    string    `gorm:"type:varchar(12)" json:"tenantId"`     //租户id
	CreateTime  time.Time `gorm:"type:datetime" json:"createTime"`      //新增时间
	CreateUser  int       `gorm:"type:int" json:"createUser"`           //新增记录操作用户ID
	UpdateTime  time.Time `gorm:"type:datetime" json:"updateTime"`      //修改时间
	UpdateUser  int       `gorm:"type:int" json:"updateUser"`           //修改用户
	IsDeleted   int       `gorm:"type:int" json:"isDeleted"`            //是否删除 0=未删除,1=删除
}

func (DeviceVendor) TableName() string {
	return "device_vendor"
}

func (c *DeviceVendor) GetVendor() ([]DeviceVendor, error) {
	var vendors []DeviceVendor
	err := Db.Model(&c).Select("id, parent_id, vendor_value").
		Where(" vendor_type = 1 and device_type = ? and is_deleted = 0 and tenant_id = ?", c.DeviceType, c.TenantId).
		Find(&vendors).Error
	return vendors, err
}

func (c *DeviceVendor) GetBrand() ([]DeviceVendor, error) {
	var vendors []DeviceVendor
	err := Db.Model(&c).Select("id, parent_id, vendor_value").
		Where(" vendor_type = 2 and device_type = ? and is_deleted = 0 and tenant_id = ?", c.DeviceType, c.TenantId).Find(&vendors).Error
	return vendors, err
}

func (c *DeviceVendor) GetModel() ([]DeviceVendor, error) {
	var vendors []DeviceVendor
	if c.ParentId > 0 {
		err := Db.Model(&c).Select("id, parent_id, vendor_value").
			Where(" vendor_type = 3 and device_type = ? and is_deleted = 0 and tenant_id = ? and parent_id = ?",
				c.DeviceType, c.TenantId, c.ParentId).Find(&vendors).Error
		return vendors, err
	} else {
		err := Db.Model(&c).Select("id, parent_id, vendor_value").
			Where(" vendor_type = 3 and device_type = ? and is_deleted = 0 and tenant_id = ?", c.DeviceType, c.TenantId).Find(&vendors).Error
		return vendors, err
	}

}

func (c DeviceVendor) GetDeviceVendors(offset, limit int) ([]DeviceVendor, int64, error) {
	var devices []DeviceVendor
	var count int64
	db := Db.Model(&c).Where("is_deleted=0")
	if c.VendorValue != "" {
		db.Where("vendor_value like ? ", "%"+c.VendorValue+"%")
	}

	if c.DeviceType >= 0 {
		db.Where("device_type=? ", c.DeviceType)
	}
	db.Count(&count)
	err := db.Order("id desc").Find(&devices).Error
	return devices, count, err
}

func (c DeviceVendor) Remove() error {
	return Db.Model(&c).Where("id=?", c.ID).Update("is_delete", 1).Error
}