package models

import "time"

type Topology struct {
	ID        int       `orm:"column(id);auto" json:"id"`
	Nodes     string    `orm:"column(nodes);type(text)" json:"nodes"`
	Edges     string    `orm:"column(edges);type(text)" json:"edges"`
	Topology  string    `orm:"column(topology);size(200)" json:"topology"`
	Status    string    `orm:"column(status);size(10)" json:"status"`
	CreatedAt time.Time `orm:"column(created_at);auto_now_add;type(datetime)" json:"created_at"`
	UpdatedAt time.Time `orm:"column(updated_at);auto_now;type(datetime)" json:"updated_at"`
}

//TableName Topology
func (t *Topology) TableName() string {
	return TableName("topology")
}

//TopologyList struct
type TopologyList struct {
	Code    int    `json:"code"`
	Message string `json:"message"`
	Data    struct {
		Items []Topology `json:"items"`
		Total int64      `json:"total"`
	} `json:"data"`
}

//TopologyList struct
type TopologyInfo struct {
	Code    int    `json:"code"`
	Message string `json:"message"`
	Data    struct {
		Items *Topology `json:"items"`
		Total int64     `json:"total"`
	} `json:"data"`
}

type AutoGenerated struct {
	Message string `json:"message"`
	Status  int    `json:"status"`
	Data    struct {
		Nodes []struct {
			ID       string `json:"id"`
			Size     int    `json:"size"`
			Label    string `json:"label"`
			Text     string `json:"text"`
			IsCenter bool   `json:"isCenter"`
			SiteFlag string `json:"siteFlag"`
			IsClick  bool   `json:"isClick"`
			Style    struct {
				Fill        string `json:"fill"`
				Opacity     int    `json:"opacity"`
				FillOpacity int    `json:"fillOpacity"`
				Cursor      string `json:"cursor"`
			} `json:"style,omitempty"`
			LabelCfg struct {
				Style struct {
					Fill     string `json:"fill"`
					FontSize int    `json:"fontSize"`
				} `json:"style"`
				Position string `json:"position"`
				Offset   []int  `json:"offset"`
			} `json:"labelCfg,omitempty"`
			BackgroundConfig struct {
				Fill    string `json:"fill"`
				Padding []int  `json:"padding"`
				Radius  int    `json:"radius"`
			} `json:"backgroundConfig"`
			IsFisrtNodes bool `json:"isFisrtNodes,omitempty"`
		} `json:"nodes"`
		Edges []struct {
			Source  string `json:"source"`
			Target  string `json:"target"`
			Type    string `json:"type"`
			Label   string `json:"label"`
			LineNum int    `json:"lineNum"`
		} `json:"edges"`
	} `json:"data"`
}

type Nodes struct {
	ID           string `json:"id"`
	InternalName string `json:"internal_name"`
	Label        string `json:"label"`
	Text         string `json:"text"`
	X            string `json:"x"`
	Y            string `json:"y"`
	Type         string `json:"type"`
	Img          string `json:"img"`
}
type Edges struct {
	Source  string `json:"source"`
	Target  string `json:"target"`
	Type    string `json:"type"`
	Label   string `json:"label"`
	LineNum int    `json:"lineNum"`
	Style   struct {
		LineWidth  int    `json:"lineWidth"`
		Stroke     string `json:"stroke"`
		StartArrow bool   `json:"startArrow"`
		EndArrow   bool   `json:"endArrow"`
	} `json:"style,"`
}

type Data struct {
	Nodes []Nodes `json:"nodes"`
	Edges []Edges `json:"edges"`
}
