// Code generated by azure-service-operator-codegen. DO NOT EDIT.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
package arm

type MaintenanceConfiguration_STATUS struct {
	// Id: Resource ID.
	Id *string `json:"id,omitempty"`

	// Name: The name of the resource that is unique within a resource group. This name can be used to access the resource.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of a default maintenance configuration.
	Properties *MaintenanceConfigurationProperties_STATUS `json:"properties,omitempty"`

	// SystemData: The system metadata relating to this resource.
	SystemData *SystemData_STATUS `json:"systemData,omitempty"`

	// Type: Resource type
	Type *string `json:"type,omitempty"`
}

// Properties used to configure planned maintenance for a Managed Cluster.
type MaintenanceConfigurationProperties_STATUS struct {
	// MaintenanceWindow: Maintenance window for the maintenance configuration.
	MaintenanceWindow *MaintenanceWindow_STATUS `json:"maintenanceWindow,omitempty"`

	// NotAllowedTime: Time slots on which upgrade is not allowed.
	NotAllowedTime []TimeSpan_STATUS `json:"notAllowedTime"`

	// TimeInWeek: If two array entries specify the same day of the week, the applied configuration is the union of times in
	// both entries.
	TimeInWeek []TimeInWeek_STATUS `json:"timeInWeek"`
}

// Metadata pertaining to creation and last modification of the resource.
type SystemData_STATUS struct {
	// CreatedAt: The timestamp of resource creation (UTC).
	CreatedAt *string `json:"createdAt,omitempty"`

	// CreatedBy: The identity that created the resource.
	CreatedBy *string `json:"createdBy,omitempty"`

	// CreatedByType: The type of identity that created the resource.
	CreatedByType *SystemData_CreatedByType_STATUS `json:"createdByType,omitempty"`

	// LastModifiedAt: The timestamp of resource last modification (UTC)
	LastModifiedAt *string `json:"lastModifiedAt,omitempty"`

	// LastModifiedBy: The identity that last modified the resource.
	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`

	// LastModifiedByType: The type of identity that last modified the resource.
	LastModifiedByType *SystemData_LastModifiedByType_STATUS `json:"lastModifiedByType,omitempty"`
}

// Maintenance window used to configure scheduled auto-upgrade for a Managed Cluster.
type MaintenanceWindow_STATUS struct {
	// DurationHours: Length of maintenance window range from 4 to 24 hours.
	DurationHours *int `json:"durationHours,omitempty"`

	// NotAllowedDates: Date ranges on which upgrade is not allowed. 'utcOffset' applies to this field. For example, with
	// 'utcOffset: +02:00' and 'dateSpan' being '2022-12-23' to '2023-01-03', maintenance will be blocked from '2022-12-22
	// 22:00' to '2023-01-03 22:00' in UTC time.
	NotAllowedDates []DateSpan_STATUS `json:"notAllowedDates"`

	// Schedule: Recurrence schedule for the maintenance window.
	Schedule *Schedule_STATUS `json:"schedule,omitempty"`

	// StartDate: The date the maintenance window activates. If the current date is before this date, the maintenance window is
	// inactive and will not be used for upgrades. If not specified, the maintenance window will be active right away.
	StartDate *string `json:"startDate,omitempty"`

	// StartTime: The start time of the maintenance window. Accepted values are from '00:00' to '23:59'. 'utcOffset' applies to
	// this field. For example: '02:00' with 'utcOffset: +02:00' means UTC time '00:00'.
	StartTime *string `json:"startTime,omitempty"`

	// UtcOffset: The UTC offset in format +/-HH:mm. For example, '+05:30' for IST and '-07:00' for PST. If not specified, the
	// default is '+00:00'.
	UtcOffset *string `json:"utcOffset,omitempty"`
}

type SystemData_CreatedByType_STATUS string

const (
	SystemData_CreatedByType_STATUS_Application     = SystemData_CreatedByType_STATUS("Application")
	SystemData_CreatedByType_STATUS_Key             = SystemData_CreatedByType_STATUS("Key")
	SystemData_CreatedByType_STATUS_ManagedIdentity = SystemData_CreatedByType_STATUS("ManagedIdentity")
	SystemData_CreatedByType_STATUS_User            = SystemData_CreatedByType_STATUS("User")
)

// Mapping from string to SystemData_CreatedByType_STATUS
var systemData_CreatedByType_STATUS_Values = map[string]SystemData_CreatedByType_STATUS{
	"application":     SystemData_CreatedByType_STATUS_Application,
	"key":             SystemData_CreatedByType_STATUS_Key,
	"managedidentity": SystemData_CreatedByType_STATUS_ManagedIdentity,
	"user":            SystemData_CreatedByType_STATUS_User,
}

type SystemData_LastModifiedByType_STATUS string

const (
	SystemData_LastModifiedByType_STATUS_Application     = SystemData_LastModifiedByType_STATUS("Application")
	SystemData_LastModifiedByType_STATUS_Key             = SystemData_LastModifiedByType_STATUS("Key")
	SystemData_LastModifiedByType_STATUS_ManagedIdentity = SystemData_LastModifiedByType_STATUS("ManagedIdentity")
	SystemData_LastModifiedByType_STATUS_User            = SystemData_LastModifiedByType_STATUS("User")
)

// Mapping from string to SystemData_LastModifiedByType_STATUS
var systemData_LastModifiedByType_STATUS_Values = map[string]SystemData_LastModifiedByType_STATUS{
	"application":     SystemData_LastModifiedByType_STATUS_Application,
	"key":             SystemData_LastModifiedByType_STATUS_Key,
	"managedidentity": SystemData_LastModifiedByType_STATUS_ManagedIdentity,
	"user":            SystemData_LastModifiedByType_STATUS_User,
}

// Time in a week.
type TimeInWeek_STATUS struct {
	// Day: The day of the week.
	Day *WeekDay_STATUS `json:"day,omitempty"`

	// HourSlots: Each integer hour represents a time range beginning at 0m after the hour ending at the next hour
	// (non-inclusive). 0 corresponds to 00:00 UTC, 23 corresponds to 23:00 UTC. Specifying [0, 1] means the 00:00 - 02:00 UTC
	// time range.
	HourSlots []int `json:"hourSlots"`
}

// For example, between 2021-05-25T13:00:00Z and 2021-05-25T14:00:00Z.
type TimeSpan_STATUS struct {
	// End: The end of a time span
	End *string `json:"end,omitempty"`

	// Start: The start of a time span
	Start *string `json:"start,omitempty"`
}

// For example, between '2022-12-23' and '2023-01-05'.
type DateSpan_STATUS struct {
	// End: The end date of the date span.
	End *string `json:"end,omitempty"`

	// Start: The start date of the date span.
	Start *string `json:"start,omitempty"`
}

// One and only one of the schedule types should be specified. Choose either 'daily', 'weekly', 'absoluteMonthly' or
// 'relativeMonthly' for your maintenance schedule.
type Schedule_STATUS struct {
	// AbsoluteMonthly: For schedules like: 'recur every month on the 15th' or 'recur every 3 months on the 20th'.
	AbsoluteMonthly *AbsoluteMonthlySchedule_STATUS `json:"absoluteMonthly,omitempty"`

	// Daily: For schedules like: 'recur every day' or 'recur every 3 days'.
	Daily *DailySchedule_STATUS `json:"daily,omitempty"`

	// RelativeMonthly: For schedules like: 'recur every month on the first Monday' or 'recur every 3 months on last Friday'.
	RelativeMonthly *RelativeMonthlySchedule_STATUS `json:"relativeMonthly,omitempty"`

	// Weekly: For schedules like: 'recur every Monday' or 'recur every 3 weeks on Wednesday'.
	Weekly *WeeklySchedule_STATUS `json:"weekly,omitempty"`
}

// The weekday enum.
type WeekDay_STATUS string

const (
	WeekDay_STATUS_Friday    = WeekDay_STATUS("Friday")
	WeekDay_STATUS_Monday    = WeekDay_STATUS("Monday")
	WeekDay_STATUS_Saturday  = WeekDay_STATUS("Saturday")
	WeekDay_STATUS_Sunday    = WeekDay_STATUS("Sunday")
	WeekDay_STATUS_Thursday  = WeekDay_STATUS("Thursday")
	WeekDay_STATUS_Tuesday   = WeekDay_STATUS("Tuesday")
	WeekDay_STATUS_Wednesday = WeekDay_STATUS("Wednesday")
)

// Mapping from string to WeekDay_STATUS
var weekDay_STATUS_Values = map[string]WeekDay_STATUS{
	"friday":    WeekDay_STATUS_Friday,
	"monday":    WeekDay_STATUS_Monday,
	"saturday":  WeekDay_STATUS_Saturday,
	"sunday":    WeekDay_STATUS_Sunday,
	"thursday":  WeekDay_STATUS_Thursday,
	"tuesday":   WeekDay_STATUS_Tuesday,
	"wednesday": WeekDay_STATUS_Wednesday,
}

// For schedules like: 'recur every month on the 15th' or 'recur every 3 months on the 20th'.
type AbsoluteMonthlySchedule_STATUS struct {
	// DayOfMonth: The date of the month.
	DayOfMonth *int `json:"dayOfMonth,omitempty"`

	// IntervalMonths: Specifies the number of months between each set of occurrences.
	IntervalMonths *int `json:"intervalMonths,omitempty"`
}

// For schedules like: 'recur every day' or 'recur every 3 days'.
type DailySchedule_STATUS struct {
	// IntervalDays: Specifies the number of days between each set of occurrences.
	IntervalDays *int `json:"intervalDays,omitempty"`
}

// For schedules like: 'recur every month on the first Monday' or 'recur every 3 months on last Friday'.
type RelativeMonthlySchedule_STATUS struct {
	// DayOfWeek: Specifies on which day of the week the maintenance occurs.
	DayOfWeek *WeekDay_STATUS `json:"dayOfWeek,omitempty"`

	// IntervalMonths: Specifies the number of months between each set of occurrences.
	IntervalMonths *int `json:"intervalMonths,omitempty"`

	// WeekIndex: Specifies on which week of the month the dayOfWeek applies.
	WeekIndex *RelativeMonthlySchedule_WeekIndex_STATUS `json:"weekIndex,omitempty"`
}

// For schedules like: 'recur every Monday' or 'recur every 3 weeks on Wednesday'.
type WeeklySchedule_STATUS struct {
	// DayOfWeek: Specifies on which day of the week the maintenance occurs.
	DayOfWeek *WeekDay_STATUS `json:"dayOfWeek,omitempty"`

	// IntervalWeeks: Specifies the number of weeks between each set of occurrences.
	IntervalWeeks *int `json:"intervalWeeks,omitempty"`
}

type RelativeMonthlySchedule_WeekIndex_STATUS string

const (
	RelativeMonthlySchedule_WeekIndex_STATUS_First  = RelativeMonthlySchedule_WeekIndex_STATUS("First")
	RelativeMonthlySchedule_WeekIndex_STATUS_Fourth = RelativeMonthlySchedule_WeekIndex_STATUS("Fourth")
	RelativeMonthlySchedule_WeekIndex_STATUS_Last   = RelativeMonthlySchedule_WeekIndex_STATUS("Last")
	RelativeMonthlySchedule_WeekIndex_STATUS_Second = RelativeMonthlySchedule_WeekIndex_STATUS("Second")
	RelativeMonthlySchedule_WeekIndex_STATUS_Third  = RelativeMonthlySchedule_WeekIndex_STATUS("Third")
)

// Mapping from string to RelativeMonthlySchedule_WeekIndex_STATUS
var relativeMonthlySchedule_WeekIndex_STATUS_Values = map[string]RelativeMonthlySchedule_WeekIndex_STATUS{
	"first":  RelativeMonthlySchedule_WeekIndex_STATUS_First,
	"fourth": RelativeMonthlySchedule_WeekIndex_STATUS_Fourth,
	"last":   RelativeMonthlySchedule_WeekIndex_STATUS_Last,
	"second": RelativeMonthlySchedule_WeekIndex_STATUS_Second,
	"third":  RelativeMonthlySchedule_WeekIndex_STATUS_Third,
}
