package ms_dhcp

import "encoding/xml"

type OptionValue struct {
	Text        string   `xml:",chardata"`
	OptionId    string   `xml:"OptionId"`
	VendorClass string   `xml:"VendorClass"`
	UserClass   string   `xml:"UserClass"`
	Value       []string `xml:"Value"`
}

type Scope struct {
	Text             string `xml:",chardata"`
	ScopeId          string `xml:"ScopeId"`
	Name             string `xml:"Name"`
	SubnetMask       string `xml:"SubnetMask"`
	StartRange       string `xml:"StartRange"`
	EndRange         string `xml:"EndRange"`
	LeaseDuration    string `xml:"LeaseDuration"`
	State            string `xml:"State"`
	Type             string `xml:"Type"`
	MaxBootpClients  string `xml:"MaxBootpClients"`
	NapEnable        string `xml:"NapEnable"`
	Delay            string `xml:"Delay"`
	NapProfile       string `xml:"NapProfile"`
	Description      string `xml:"Description"`
	ActivatePolicies string `xml:"ActivatePolicies"`
	SuperScopeName   string `xml:"SuperScopeName"`
	OptionValues     struct {
		Text        string        `xml:",chardata"`
		OptionValue []OptionValue `xml:"OptionValue"`
	} `xml:"OptionValues"`
	Reservations struct {
		Text        string        `xml:",chardata"`
		Reservation []Reservation `xml:"Reservation"`
	} `xml:"Reservations"`
	Leases struct {
		Text  string  `xml:",chardata"`
		Lease []Lease `xml:"Lease"`
	} `xml:"Leases"`
}

type Lease struct {
	Text            string `xml:",chardata"`
	IPAddress       string `xml:"IPAddress"`
	ScopeId         string `xml:"ScopeId"`
	ClientId        string `xml:"ClientId"`
	AddressState    string `xml:"AddressState"`
	ClientType      string `xml:"ClientType"`
	NapCapable      string `xml:"NapCapable"`
	DnsRR           string `xml:"DnsRR"`
	DnsRegistration string `xml:"DnsRegistration"`
	LeaseExpiryTime string `xml:"LeaseExpiryTime"`
	NapStatus       string `xml:"NapStatus"`
	HostName        string `xml:"HostName"`
	Description     string `xml:"Description"`
}

type Reservation struct {
	Text         string `xml:",chardata"`
	Name         string `xml:"Name"`
	IPAddress    string `xml:"IPAddress"`
	ClientId     string `xml:"ClientId"`
	Type         string `xml:"Type"`
	Description  string `xml:"Description"`
	OptionValues struct {
		Text        string      `xml:",chardata"`
		OptionValue OptionValue `xml:"OptionValue"`
	} `xml:"OptionValues"`
}

// Generated by https://www.onlinetool.io/xmltogo/
type DHCPServer struct {
	IPv6 struct {
		Classes struct {
			Text  string `xml:",chardata"`
			Class struct {
				Text        string `xml:",chardata"`
				Name        string `xml:"Name"`
				Type        string `xml:"Type"`
				Data        string `xml:"Data"`
				Description string `xml:"Description"`
				VendorId    string `xml:"VendorId"`
			} `xml:"Class"`
		} `xml:"Classes"`
		StatelessStore struct {
			Text          string `xml:",chardata"`
			Enabled       string `xml:"Enabled"`
			PurgeInterval string `xml:"PurgeInterval"`
		} `xml:"StatelessStore"`
		Text              string `xml:",chardata"`
		Xmlns             string `xml:"xmlns,attr"`
		OptionDefinitions struct {
			Text             string `xml:",chardata"`
			OptionDefinition []struct {
				Text         string `xml:",chardata"`
				Name         string `xml:"Name"`
				OptionId     string `xml:"OptionId"`
				Type         string `xml:"Type"`
				MultiValued  string `xml:"MultiValued"`
				DefaultValue string `xml:"DefaultValue"`
				Description  string `xml:"Description"`
				VendorClass  string `xml:"VendorClass"`
			} `xml:"OptionDefinition"`
		} `xml:"OptionDefinitions"`
	} `xml:"IPv6"`
	XMLName      xml.Name `xml:"DHCPServer"`
	MajorVersion struct {
		Text  string `xml:",chardata"`
		Xmlns string `xml:"xmlns,attr"`
	} `xml:"MajorVersion"`
	MinorVersion struct {
		Text  string `xml:",chardata"`
		Xmlns string `xml:"xmlns,attr"`
	} `xml:"MinorVersion"`
	Text  string `xml:",chardata"`
	Xmlns string `xml:"xmlns,attr"`
	IPv4  struct {
		Text                      string `xml:",chardata"`
		Xmlns                     string `xml:"xmlns,attr"`
		ConflictDetectionAttempts string `xml:"ConflictDetectionAttempts"`
		NapEnabled                string `xml:"NapEnabled"`
		NpsUnreachableAction      string `xml:"NpsUnreachableAction"`
		ActivatePolicies          string `xml:"ActivatePolicies"`
		Classes                   struct {
			Text  string `xml:",chardata"`
			Class []struct {
				Text        string `xml:",chardata"`
				Name        string `xml:"Name"`
				Type        string `xml:"Type"`
				Data        string `xml:"Data"`
				Description string `xml:"Description"`
			} `xml:"Class"`
		} `xml:"Classes"`
		OptionDefinitions struct {
			Text             string `xml:",chardata"`
			OptionDefinition []struct {
				Text         string `xml:",chardata"`
				Name         string `xml:"Name"`
				OptionId     string `xml:"OptionId"`
				Type         string `xml:"Type"`
				MultiValued  string `xml:"MultiValued"`
				Description  string `xml:"Description"`
				VendorClass  string `xml:"VendorClass"`
				DefaultValue string `xml:"DefaultValue"`
			} `xml:"OptionDefinition"`
		} `xml:"OptionDefinitions"`
		OptionValues struct {
			Text        string      `xml:",chardata"`
			OptionValue OptionValue `xml:"OptionValue"`
		} `xml:"OptionValues"`
		Filters struct {
			Text  string `xml:",chardata"`
			Allow string `xml:"Allow"`
			Deny  string `xml:"Deny"`
		} `xml:"Filters"`
		Scopes struct {
			Text  string  `xml:",chardata"`
			Scope []Scope `xml:"Scope"`
		} `xml:"Scopes"`
	} `xml:"IPv4"`
}
