// *** 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.orbital.outputs;

import com.pulumi.azure.orbital.outputs.ContactProfileLinkChannelEndPoint;
import com.pulumi.core.annotations.CustomType;
import java.lang.Double;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;

@CustomType
public final class ContactProfileLinkChannel {
    /**
     * @return Bandwidth in MHz.
     * 
     */
    private Double bandwidthMhz;
    /**
     * @return Center frequency in MHz.
     * 
     */
    private Double centerFrequencyMhz;
    /**
     * @return Copy of the modem configuration file such as Kratos QRadio or Kratos QuantumRx. Only valid for downlink directions. If provided, the modem connects to the customer endpoint and sends demodulated data instead of a VITA.49 stream.
     * 
     */
    private @Nullable String demodulationConfiguration;
    /**
     * @return Customer End point to store/retrieve data during a contact. An `end_point` block as defined below.
     * 
     */
    private List<ContactProfileLinkChannelEndPoint> endPoints;
    /**
     * @return Copy of the modem configuration file such as Kratos QRadio. Only valid for uplink directions. If provided, the modem connects to the customer endpoint and accepts commands from the customer instead of a VITA.49 stream.
     * 
     */
    private @Nullable String modulationConfiguration;
    /**
     * @return Name of the channel.
     * 
     */
    private String name;

    private ContactProfileLinkChannel() {}
    /**
     * @return Bandwidth in MHz.
     * 
     */
    public Double bandwidthMhz() {
        return this.bandwidthMhz;
    }
    /**
     * @return Center frequency in MHz.
     * 
     */
    public Double centerFrequencyMhz() {
        return this.centerFrequencyMhz;
    }
    /**
     * @return Copy of the modem configuration file such as Kratos QRadio or Kratos QuantumRx. Only valid for downlink directions. If provided, the modem connects to the customer endpoint and sends demodulated data instead of a VITA.49 stream.
     * 
     */
    public Optional<String> demodulationConfiguration() {
        return Optional.ofNullable(this.demodulationConfiguration);
    }
    /**
     * @return Customer End point to store/retrieve data during a contact. An `end_point` block as defined below.
     * 
     */
    public List<ContactProfileLinkChannelEndPoint> endPoints() {
        return this.endPoints;
    }
    /**
     * @return Copy of the modem configuration file such as Kratos QRadio. Only valid for uplink directions. If provided, the modem connects to the customer endpoint and accepts commands from the customer instead of a VITA.49 stream.
     * 
     */
    public Optional<String> modulationConfiguration() {
        return Optional.ofNullable(this.modulationConfiguration);
    }
    /**
     * @return Name of the channel.
     * 
     */
    public String name() {
        return this.name;
    }

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

    public static Builder builder(ContactProfileLinkChannel defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private Double bandwidthMhz;
        private Double centerFrequencyMhz;
        private @Nullable String demodulationConfiguration;
        private List<ContactProfileLinkChannelEndPoint> endPoints;
        private @Nullable String modulationConfiguration;
        private String name;
        public Builder() {}
        public Builder(ContactProfileLinkChannel defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.bandwidthMhz = defaults.bandwidthMhz;
    	      this.centerFrequencyMhz = defaults.centerFrequencyMhz;
    	      this.demodulationConfiguration = defaults.demodulationConfiguration;
    	      this.endPoints = defaults.endPoints;
    	      this.modulationConfiguration = defaults.modulationConfiguration;
    	      this.name = defaults.name;
        }

        @CustomType.Setter
        public Builder bandwidthMhz(Double bandwidthMhz) {
            this.bandwidthMhz = Objects.requireNonNull(bandwidthMhz);
            return this;
        }
        @CustomType.Setter
        public Builder centerFrequencyMhz(Double centerFrequencyMhz) {
            this.centerFrequencyMhz = Objects.requireNonNull(centerFrequencyMhz);
            return this;
        }
        @CustomType.Setter
        public Builder demodulationConfiguration(@Nullable String demodulationConfiguration) {
            this.demodulationConfiguration = demodulationConfiguration;
            return this;
        }
        @CustomType.Setter
        public Builder endPoints(List<ContactProfileLinkChannelEndPoint> endPoints) {
            this.endPoints = Objects.requireNonNull(endPoints);
            return this;
        }
        public Builder endPoints(ContactProfileLinkChannelEndPoint... endPoints) {
            return endPoints(List.of(endPoints));
        }
        @CustomType.Setter
        public Builder modulationConfiguration(@Nullable String modulationConfiguration) {
            this.modulationConfiguration = modulationConfiguration;
            return this;
        }
        @CustomType.Setter
        public Builder name(String name) {
            this.name = Objects.requireNonNull(name);
            return this;
        }
        public ContactProfileLinkChannel build() {
            final var o = new ContactProfileLinkChannel();
            o.bandwidthMhz = bandwidthMhz;
            o.centerFrequencyMhz = centerFrequencyMhz;
            o.demodulationConfiguration = demodulationConfiguration;
            o.endPoints = endPoints;
            o.modulationConfiguration = modulationConfiguration;
            o.name = name;
            return o;
        }
    }
}
