// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.azure.lab.inputs;

import com.pulumi.azure.lab.inputs.ScheduleRecurrenceArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class ScheduleState extends com.pulumi.resources.ResourceArgs {

    public static final ScheduleState Empty = new ScheduleState();

    /**
     * The resource ID of the Lab Service Schedule. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="labId")
    private @Nullable Output<String> labId;

    /**
     * @return The resource ID of the Lab Service Schedule. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> labId() {
        return Optional.ofNullable(this.labId);
    }

    /**
     * The name which should be used for this Lab Service Schedule. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return The name which should be used for this Lab Service Schedule. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * The notes for the Schedule.
     * 
     */
    @Import(name="notes")
    private @Nullable Output<String> notes;

    /**
     * @return The notes for the Schedule.
     * 
     */
    public Optional<Output<String>> notes() {
        return Optional.ofNullable(this.notes);
    }

    /**
     * A `recurrence` block as defined below.
     * 
     */
    @Import(name="recurrence")
    private @Nullable Output<ScheduleRecurrenceArgs> recurrence;

    /**
     * @return A `recurrence` block as defined below.
     * 
     */
    public Optional<Output<ScheduleRecurrenceArgs>> recurrence() {
        return Optional.ofNullable(this.recurrence);
    }

    /**
     * When Lab User Virtual Machines will be started in RFC-3339 format.
     * 
     */
    @Import(name="startTime")
    private @Nullable Output<String> startTime;

    /**
     * @return When Lab User Virtual Machines will be started in RFC-3339 format.
     * 
     */
    public Optional<Output<String>> startTime() {
        return Optional.ofNullable(this.startTime);
    }

    /**
     * When Lab User Virtual Machines will be stopped in RFC-3339 format.
     * 
     */
    @Import(name="stopTime")
    private @Nullable Output<String> stopTime;

    /**
     * @return When Lab User Virtual Machines will be stopped in RFC-3339 format.
     * 
     */
    public Optional<Output<String>> stopTime() {
        return Optional.ofNullable(this.stopTime);
    }

    /**
     * The IANA Time Zone ID for the Schedule.
     * 
     */
    @Import(name="timeZone")
    private @Nullable Output<String> timeZone;

    /**
     * @return The IANA Time Zone ID for the Schedule.
     * 
     */
    public Optional<Output<String>> timeZone() {
        return Optional.ofNullable(this.timeZone);
    }

    private ScheduleState() {}

    private ScheduleState(ScheduleState $) {
        this.labId = $.labId;
        this.name = $.name;
        this.notes = $.notes;
        this.recurrence = $.recurrence;
        this.startTime = $.startTime;
        this.stopTime = $.stopTime;
        this.timeZone = $.timeZone;
    }

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(ScheduleState defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private ScheduleState $;

        public Builder() {
            $ = new ScheduleState();
        }

        public Builder(ScheduleState defaults) {
            $ = new ScheduleState(Objects.requireNonNull(defaults));
        }

        /**
         * @param labId The resource ID of the Lab Service Schedule. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder labId(@Nullable Output<String> labId) {
            $.labId = labId;
            return this;
        }

        /**
         * @param labId The resource ID of the Lab Service Schedule. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder labId(String labId) {
            return labId(Output.of(labId));
        }

        /**
         * @param name The name which should be used for this Lab Service Schedule. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name The name which should be used for this Lab Service Schedule. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param notes The notes for the Schedule.
         * 
         * @return builder
         * 
         */
        public Builder notes(@Nullable Output<String> notes) {
            $.notes = notes;
            return this;
        }

        /**
         * @param notes The notes for the Schedule.
         * 
         * @return builder
         * 
         */
        public Builder notes(String notes) {
            return notes(Output.of(notes));
        }

        /**
         * @param recurrence A `recurrence` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder recurrence(@Nullable Output<ScheduleRecurrenceArgs> recurrence) {
            $.recurrence = recurrence;
            return this;
        }

        /**
         * @param recurrence A `recurrence` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder recurrence(ScheduleRecurrenceArgs recurrence) {
            return recurrence(Output.of(recurrence));
        }

        /**
         * @param startTime When Lab User Virtual Machines will be started in RFC-3339 format.
         * 
         * @return builder
         * 
         */
        public Builder startTime(@Nullable Output<String> startTime) {
            $.startTime = startTime;
            return this;
        }

        /**
         * @param startTime When Lab User Virtual Machines will be started in RFC-3339 format.
         * 
         * @return builder
         * 
         */
        public Builder startTime(String startTime) {
            return startTime(Output.of(startTime));
        }

        /**
         * @param stopTime When Lab User Virtual Machines will be stopped in RFC-3339 format.
         * 
         * @return builder
         * 
         */
        public Builder stopTime(@Nullable Output<String> stopTime) {
            $.stopTime = stopTime;
            return this;
        }

        /**
         * @param stopTime When Lab User Virtual Machines will be stopped in RFC-3339 format.
         * 
         * @return builder
         * 
         */
        public Builder stopTime(String stopTime) {
            return stopTime(Output.of(stopTime));
        }

        /**
         * @param timeZone The IANA Time Zone ID for the Schedule.
         * 
         * @return builder
         * 
         */
        public Builder timeZone(@Nullable Output<String> timeZone) {
            $.timeZone = timeZone;
            return this;
        }

        /**
         * @param timeZone The IANA Time Zone ID for the Schedule.
         * 
         * @return builder
         * 
         */
        public Builder timeZone(String timeZone) {
            return timeZone(Output.of(timeZone));
        }

        public ScheduleState build() {
            return $;
        }
    }

}
