// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Code generated by Microsoft (R) AutoRest Code Generator.

package com.azure.resourcemanager.agrifood.models;

import com.azure.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;

/** Model to capture detailed information for farmBeatsExtensions. */
@Fluent
public final class DetailedInformation {
    /*
     * ApiName available for the farmBeatsExtension.
     */
    @JsonProperty(value = "apiName")
    private String apiName;

    /*
     * List of customParameters.
     */
    @JsonProperty(value = "customParameters")
    private List<String> customParameters;

    /*
     * List of platformParameters.
     */
    @JsonProperty(value = "platformParameters")
    private List<String> platformParameters;

    /*
     * Unit systems info for the data provider.
     */
    @JsonProperty(value = "unitsSupported")
    private UnitSystemsInfo unitsSupported;

    /*
     * List of apiInputParameters.
     */
    @JsonProperty(value = "apiInputParameters")
    private List<String> apiInputParameters;

    /**
     * Get the apiName property: ApiName available for the farmBeatsExtension.
     *
     * @return the apiName value.
     */
    public String apiName() {
        return this.apiName;
    }

    /**
     * Set the apiName property: ApiName available for the farmBeatsExtension.
     *
     * @param apiName the apiName value to set.
     * @return the DetailedInformation object itself.
     */
    public DetailedInformation withApiName(String apiName) {
        this.apiName = apiName;
        return this;
    }

    /**
     * Get the customParameters property: List of customParameters.
     *
     * @return the customParameters value.
     */
    public List<String> customParameters() {
        return this.customParameters;
    }

    /**
     * Set the customParameters property: List of customParameters.
     *
     * @param customParameters the customParameters value to set.
     * @return the DetailedInformation object itself.
     */
    public DetailedInformation withCustomParameters(List<String> customParameters) {
        this.customParameters = customParameters;
        return this;
    }

    /**
     * Get the platformParameters property: List of platformParameters.
     *
     * @return the platformParameters value.
     */
    public List<String> platformParameters() {
        return this.platformParameters;
    }

    /**
     * Set the platformParameters property: List of platformParameters.
     *
     * @param platformParameters the platformParameters value to set.
     * @return the DetailedInformation object itself.
     */
    public DetailedInformation withPlatformParameters(List<String> platformParameters) {
        this.platformParameters = platformParameters;
        return this;
    }

    /**
     * Get the unitsSupported property: Unit systems info for the data provider.
     *
     * @return the unitsSupported value.
     */
    public UnitSystemsInfo unitsSupported() {
        return this.unitsSupported;
    }

    /**
     * Set the unitsSupported property: Unit systems info for the data provider.
     *
     * @param unitsSupported the unitsSupported value to set.
     * @return the DetailedInformation object itself.
     */
    public DetailedInformation withUnitsSupported(UnitSystemsInfo unitsSupported) {
        this.unitsSupported = unitsSupported;
        return this;
    }

    /**
     * Get the apiInputParameters property: List of apiInputParameters.
     *
     * @return the apiInputParameters value.
     */
    public List<String> apiInputParameters() {
        return this.apiInputParameters;
    }

    /**
     * Set the apiInputParameters property: List of apiInputParameters.
     *
     * @param apiInputParameters the apiInputParameters value to set.
     * @return the DetailedInformation object itself.
     */
    public DetailedInformation withApiInputParameters(List<String> apiInputParameters) {
        this.apiInputParameters = apiInputParameters;
        return this;
    }

    /**
     * Validates the instance.
     *
     * @throws IllegalArgumentException thrown if the instance is not valid.
     */
    public void validate() {
        if (unitsSupported() != null) {
            unitsSupported().validate();
        }
    }
}
