package relay

import (
	"github.com/astaxie/beego/orm"

	"git.kingpenguin.tk/chteufleur/datahouse.git/models/database"
	"git.kingpenguin.tk/chteufleur/datahouse.git/models/utils"
)

type RelayTable struct {
	Id          int64
	Mac         string
	Description string
	IpAddress   string
}

func init() {
	orm.RegisterModel(new(RelayTable))
}

func GetRelayByMac(relayMac string) *RelayTable {
	o := orm.NewOrm()
	o.Using(database.Alias)

	ret := new(RelayTable)
	var maps []orm.Params
	_, err := o.QueryTable(new(RelayTable)).Filter("Mac", relayMac).Values(&maps)
	if err == nil {
		for _, m := range maps {
			ret.Id = utils.GetInt(m, "Id")
			ret.Mac = utils.GetString(m, "Mac")
			ret.Description = utils.GetString(m, "Description")
			ret.IpAddress = utils.GetString(m, "IpAddress")
			break
		}
	}

	return ret
}

func GetAllRelay() []RelayTable {
	o := orm.NewOrm()
	o.Using(database.Alias)

	var ret []RelayTable
	var maps []orm.Params
	_, err := o.QueryTable(new(RelayTable)).Values(&maps)
	if err == nil {
		for _, m := range maps {
			r := new(RelayTable)
			r.Id = utils.GetInt(m, "Id")
			r.Mac = utils.GetString(m, "Mac")
			r.Description = utils.GetString(m, "Description")
			r.IpAddress = utils.GetString(m, "IpAddress")

			ret = append(ret, *r)
		}
	}
	return ret
}

func GetRelay(id int64) *RelayTable {
	o := orm.NewOrm()
	o.Using(database.Alias)

	var ret = new(RelayTable)
	var maps []orm.Params
	_, err := o.QueryTable(new(RelayTable)).Filter("Id", id).Values(&maps)
	if err == nil {
		for _, m := range maps {
			ret.Id = utils.GetInt(m, "Id")
			ret.Mac = utils.GetString(m, "Mac")
			ret.Description = utils.GetString(m, "Description")
			ret.IpAddress = utils.GetString(m, "IpAddress")
		}
	}
	return ret
}

func UpdateSensorDescription(mac, description string) {
	o := orm.NewOrm()
	o.Using(database.Alias)

	s := GetRelayByMac(mac)
	if o.Read(s) == nil {
		s.Description = description
		o.Update(s)
	} else {
		AddRelay(mac, description, "")
	}
}

func UpdateSensorIpAddress(mac, ip string) {
	o := orm.NewOrm()
	o.Using(database.Alias)

	s := GetRelayByMac(mac)
	if o.Read(s) == nil {
		s.IpAddress = ip
		o.Update(s)
	} else {
		AddRelay(mac, "", ip)
	}
}

func AddRelay(mac, desc, ip string) {
	o := orm.NewOrm()
	o.Using(database.Alias)
	_, _ = o.Insert(&RelayTable{Mac: mac, Description: desc, IpAddress: ip})
}

func DeleteSensorByMac(mac string) {
	o := orm.NewOrm()
	o.Using(database.Alias)
	o.Delete(&RelayTable{Mac: mac})
}

func DeleteSensor(id int64) {
	o := orm.NewOrm()
	o.Using(database.Alias)
	o.Delete(&RelayTable{Id: id})
}
