package stack

import "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"

func dataSourceStackSchemaMake() map[string]*schema.Schema {
	return map[string]*schema.Schema{
		"stack_id": {
			Type:        schema.TypeInt,
			Required:    true,
			Description: "stack_id",
		},
		"ckey": {
			Type:        schema.TypeString,
			Computed:    true,
			Description: "ckey",
		},
		"meta": {
			Type:     schema.TypeList,
			Computed: true,
			Elem: &schema.Schema{
				Type: schema.TypeString,
			},
			Description: "meta",
		},
		"api_url": {
			Type:        schema.TypeString,
			Computed:    true,
			Description: "api_url",
		},
		"api_key": {
			Type:        schema.TypeString,
			Computed:    true,
			Description: "api_key",
		},
		"app_id": {
			Type:        schema.TypeString,
			Computed:    true,
			Description: "api_id",
		},
		"cpu_allocation_ratio": {
			Type:        schema.TypeFloat,
			Computed:    true,
			Description: "cpu_allocation_ratio",
		},
		"description": {
			Type:        schema.TypeString,
			Computed:    true,
			Description: "description",
		},
		"descr": {
			Type:        schema.TypeString,
			Computed:    true,
			Description: "descr",
		},
		"drivers": {
			Type:     schema.TypeList,
			Computed: true,
			Elem: &schema.Schema{
				Type: schema.TypeString,
			},
			Description: "drivers",
		},
		"eco": {
			Type:        schema.TypeString,
			Computed:    true,
			Description: "eco",
		},
		"error": {
			Type:        schema.TypeInt,
			Computed:    true,
			Description: "error",
		},
		"gid": {
			Type:        schema.TypeInt,
			Computed:    true,
			Description: "gid",
		},
		"guid": {
			Type:        schema.TypeInt,
			Computed:    true,
			Description: "guid",
		},
		"images": {
			Type:     schema.TypeList,
			Computed: true,
			Elem: &schema.Schema{
				Type: schema.TypeInt,
			},
			Description: "images",
		},
		"login": {
			Type:        schema.TypeString,
			Computed:    true,
			Description: "login",
		},
		"mem_allocation_ratio": {
			Type:        schema.TypeFloat,
			Computed:    true,
			Description: "mem_allocation_ratio",
		},
		"name": {
			Type:        schema.TypeString,
			Computed:    true,
			Description: "name",
		},
		"packages": {
			Type:     schema.TypeList,
			Computed: true,
			Elem: &schema.Resource{
				Schema: map[string]*schema.Schema{
					"libvirt_bin": {
						Type:        schema.TypeList,
						Computed:    true,
						Description: "libvirt_bin",
						Elem: &schema.Resource{
							Schema: map[string]*schema.Schema{
								"installed_size": {
									Type:        schema.TypeString,
									Computed:    true,
									Description: "installed_size",
								},
								"ver": {
									Type:        schema.TypeString,
									Computed:    true,
									Description: "ver",
								},
							},
						},
					},
					"libvirt_daemon": {
						Type:        schema.TypeList,
						Computed:    true,
						Description: "libvirt_daemon",
						Elem: &schema.Resource{
							Schema: map[string]*schema.Schema{
								"installed_size": {
									Type:        schema.TypeString,
									Computed:    true,
									Description: "installed_size",
								},
								"ver": {
									Type:        schema.TypeString,
									Computed:    true,
									Description: "ver",
								},
							},
						},
					},
					"lvm2_lockd": {
						Type:        schema.TypeList,
						Computed:    true,
						Description: "lvm2_lockd",
						Elem: &schema.Resource{
							Schema: map[string]*schema.Schema{
								"installed_size": {
									Type:        schema.TypeString,
									Computed:    true,
									Description: "installed_size",
								},
								"ver": {
									Type:        schema.TypeString,
									Computed:    true,
									Description: "ver",
								},
							},
						},
					},
					"openvswitch_common": {
						Type:        schema.TypeList,
						Computed:    true,
						Description: "openvswitch_common",
						Elem: &schema.Resource{
							Schema: map[string]*schema.Schema{
								"installed_size": {
									Type:        schema.TypeString,
									Computed:    true,
									Description: "installed_size",
								},
								"ver": {
									Type:        schema.TypeString,
									Computed:    true,
									Description: "ver",
								},
							},
						},
					},
					"openvswitch_switch": {
						Type:        schema.TypeList,
						Computed:    true,
						Description: "openvswitch_switch",
						Elem: &schema.Resource{
							Schema: map[string]*schema.Schema{
								"installed_size": {
									Type:        schema.TypeString,
									Computed:    true,
									Description: "installed_size",
								},
								"ver": {
									Type:        schema.TypeString,
									Computed:    true,
									Description: "ver",
								},
							},
						},
					},
					"qemu_system_x86": {
						Type:        schema.TypeList,
						Computed:    true,
						Description: "qemu_system_x86",
						Elem: &schema.Resource{
							Schema: map[string]*schema.Schema{
								"installed_size": {
									Type:        schema.TypeString,
									Computed:    true,
									Description: "installed_size",
								},
								"ver": {
									Type:        schema.TypeString,
									Computed:    true,
									Description: "ver",
								},
							},
						},
					},
					"sanlock": {
						Type:        schema.TypeList,
						Computed:    true,
						Description: "sanlock",
						Elem: &schema.Resource{
							Schema: map[string]*schema.Schema{
								"installed_size": {
									Type:        schema.TypeString,
									Computed:    true,
									Description: "installed_size",
								},
								"ver": {
									Type:        schema.TypeString,
									Computed:    true,
									Description: "ver",
								},
							},
						},
					},
				},
			},
		},
		"passwd": {
			Type:        schema.TypeString,
			Computed:    true,
			Description: "password",
		},
		"reference_id": {
			Type:        schema.TypeString,
			Computed:    true,
			Description: "reference_id",
		},
		"status": {
			Type:        schema.TypeString,
			Computed:    true,
			Description: "status",
		},
		"type": {
			Type:        schema.TypeString,
			Computed:    true,
			Description: "type",
		},
	}
}

func dataSourceStacksListSchemaMake() map[string]*schema.Schema {
	return map[string]*schema.Schema{
		"by_id": {
			Type:        schema.TypeInt,
			Optional:    true,
			Description: "by_id",
		},
		"name": {
			Type:        schema.TypeString,
			Optional:    true,
			Description: "name",
		},
		"type": {
			Type:        schema.TypeString,
			Optional:    true,
			Description: "type",
		},
		"status": {
			Type:        schema.TypeString,
			Optional:    true,
			Description: "type",
		},
		"sort_by": {
			Type:        schema.TypeString,
			Optional:    true,
			Description: "sort by one of supported fields, format +|-(field)",
		},
		"page": {
			Type:        schema.TypeInt,
			Optional:    true,
			Description: "page number",
		},
		"size": {
			Type:        schema.TypeInt,
			Optional:    true,
			Description: "page size",
		},
		"items": {
			Type:     schema.TypeList,
			Computed: true,
			Elem: &schema.Resource{
				Schema: map[string]*schema.Schema{
					"stack_id": {
						Type:        schema.TypeInt,
						Required:    true,
						Description: "stack_id",
					},
					"ckey": {
						Type:        schema.TypeString,
						Computed:    true,
						Description: "ckey",
					},
					"meta": {
						Type:     schema.TypeList,
						Computed: true,
						Elem: &schema.Schema{
							Type: schema.TypeString,
						},
						Description: "meta",
					},
					"api_url": {
						Type:        schema.TypeString,
						Computed:    true,
						Description: "api_url",
					},
					"api_key": {
						Type:        schema.TypeString,
						Computed:    true,
						Description: "api_key",
					},
					"app_id": {
						Type:        schema.TypeString,
						Computed:    true,
						Description: "api_id",
					},
					"cpu_allocation_ratio": {
						Type:        schema.TypeFloat,
						Computed:    true,
						Description: "cpu_allocation_ratio",
					},
					"description": {
						Type:        schema.TypeString,
						Computed:    true,
						Description: "description",
					},
					"descr": {
						Type:        schema.TypeString,
						Computed:    true,
						Description: "descr",
					},
					"drivers": {
						Type:     schema.TypeList,
						Computed: true,
						Elem: &schema.Schema{
							Type: schema.TypeString,
						},
						Description: "drivers",
					},
					"eco": {
						Type:        schema.TypeString,
						Computed:    true,
						Description: "eco",
					},
					"error": {
						Type:        schema.TypeInt,
						Computed:    true,
						Description: "error",
					},
					"gid": {
						Type:        schema.TypeInt,
						Computed:    true,
						Description: "gid",
					},
					"guid": {
						Type:        schema.TypeInt,
						Computed:    true,
						Description: "guid",
					},
					"images": {
						Type:     schema.TypeList,
						Computed: true,
						Elem: &schema.Schema{
							Type: schema.TypeInt,
						},
						Description: "images",
					},
					"login": {
						Type:        schema.TypeString,
						Computed:    true,
						Description: "login",
					},
					"mem_allocation_ratio": {
						Type:        schema.TypeFloat,
						Computed:    true,
						Description: "mem_allocation_ratio",
					},
					"name": {
						Type:        schema.TypeString,
						Computed:    true,
						Description: "name",
					},
					"packages": {
						Type:     schema.TypeList,
						Computed: true,
						Elem: &schema.Resource{
							Schema: map[string]*schema.Schema{
								"libvirt_bin": {
									Type:        schema.TypeList,
									Computed:    true,
									Description: "libvirt_bin",
									Elem: &schema.Resource{
										Schema: map[string]*schema.Schema{
											"installed_size": {
												Type:        schema.TypeString,
												Computed:    true,
												Description: "installed_size",
											},
											"ver": {
												Type:        schema.TypeString,
												Computed:    true,
												Description: "ver",
											},
										},
									},
								},
								"libvirt_daemon": {
									Type:        schema.TypeList,
									Computed:    true,
									Description: "libvirt_daemon",
									Elem: &schema.Resource{
										Schema: map[string]*schema.Schema{
											"installed_size": {
												Type:        schema.TypeString,
												Computed:    true,
												Description: "installed_size",
											},
											"ver": {
												Type:        schema.TypeString,
												Computed:    true,
												Description: "ver",
											},
										},
									},
								},
								"lvm2_lockd": {
									Type:        schema.TypeList,
									Computed:    true,
									Description: "lvm2_lockd",
									Elem: &schema.Resource{
										Schema: map[string]*schema.Schema{
											"installed_size": {
												Type:        schema.TypeString,
												Computed:    true,
												Description: "installed_size",
											},
											"ver": {
												Type:        schema.TypeString,
												Computed:    true,
												Description: "ver",
											},
										},
									},
								},
								"openvswitch_common": {
									Type:        schema.TypeList,
									Computed:    true,
									Description: "openvswitch_common",
									Elem: &schema.Resource{
										Schema: map[string]*schema.Schema{
											"installed_size": {
												Type:        schema.TypeString,
												Computed:    true,
												Description: "installed_size",
											},
											"ver": {
												Type:        schema.TypeString,
												Computed:    true,
												Description: "ver",
											},
										},
									},
								},
								"openvswitch_switch": {
									Type:        schema.TypeList,
									Computed:    true,
									Description: "openvswitch_switch",
									Elem: &schema.Resource{
										Schema: map[string]*schema.Schema{
											"installed_size": {
												Type:        schema.TypeString,
												Computed:    true,
												Description: "installed_size",
											},
											"ver": {
												Type:        schema.TypeString,
												Computed:    true,
												Description: "ver",
											},
										},
									},
								},
								"qemu_system_x86": {
									Type:        schema.TypeList,
									Computed:    true,
									Description: "qemu_system_x86",
									Elem: &schema.Resource{
										Schema: map[string]*schema.Schema{
											"installed_size": {
												Type:        schema.TypeString,
												Computed:    true,
												Description: "installed_size",
											},
											"ver": {
												Type:        schema.TypeString,
												Computed:    true,
												Description: "ver",
											},
										},
									},
								},
								"sanlock": {
									Type:        schema.TypeList,
									Computed:    true,
									Description: "sanlock",
									Elem: &schema.Resource{
										Schema: map[string]*schema.Schema{
											"installed_size": {
												Type:        schema.TypeString,
												Computed:    true,
												Description: "installed_size",
											},
											"ver": {
												Type:        schema.TypeString,
												Computed:    true,
												Description: "ver",
											},
										},
									},
								},
							},
						},
					},
					"passwd": {
						Type:        schema.TypeString,
						Computed:    true,
						Description: "password",
					},
					"reference_id": {
						Type:        schema.TypeString,
						Computed:    true,
						Description: "reference_id",
					},
					"status": {
						Type:        schema.TypeString,
						Computed:    true,
						Description: "status",
					},
					"type": {
						Type:        schema.TypeString,
						Computed:    true,
						Description: "type",
					},
				},
			},
			Description: "items of stacks list",
		},
		"entry_count": {
			Type:        schema.TypeInt,
			Computed:    true,
			Description: "entry_count",
		},
	}
}
