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

package com.azure.resourcemanager.customerinsights.models;

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

/** The Metadata definition base. */
@Fluent
public class MetadataDefinitionBase {
    /*
     * The attributes for the Type.
     */
    @JsonProperty(value = "attributes")
    @JsonInclude(value = JsonInclude.Include.NON_NULL, content = JsonInclude.Include.ALWAYS)
    private Map<String, List<String>> attributes;

    /*
     * Localized descriptions for the property.
     */
    @JsonProperty(value = "description")
    @JsonInclude(value = JsonInclude.Include.NON_NULL, content = JsonInclude.Include.ALWAYS)
    private Map<String, String> description;

    /*
     * Localized display names for the property.
     */
    @JsonProperty(value = "displayName")
    @JsonInclude(value = JsonInclude.Include.NON_NULL, content = JsonInclude.Include.ALWAYS)
    private Map<String, String> displayName;

    /*
     * Any custom localized attributes for the Type.
     */
    @JsonProperty(value = "localizedAttributes")
    @JsonInclude(value = JsonInclude.Include.NON_NULL, content = JsonInclude.Include.ALWAYS)
    private Map<String, Map<String, String>> localizedAttributes;

    /*
     * Small Image associated with the Property or EntityType.
     */
    @JsonProperty(value = "smallImage")
    private String smallImage;

    /*
     * Medium Image associated with the Property or EntityType.
     */
    @JsonProperty(value = "mediumImage")
    private String mediumImage;

    /*
     * Large Image associated with the Property or EntityType.
     */
    @JsonProperty(value = "largeImage")
    private String largeImage;

    /** Creates an instance of MetadataDefinitionBase class. */
    public MetadataDefinitionBase() {
    }

    /**
     * Get the attributes property: The attributes for the Type.
     *
     * @return the attributes value.
     */
    public Map<String, List<String>> attributes() {
        return this.attributes;
    }

    /**
     * Set the attributes property: The attributes for the Type.
     *
     * @param attributes the attributes value to set.
     * @return the MetadataDefinitionBase object itself.
     */
    public MetadataDefinitionBase withAttributes(Map<String, List<String>> attributes) {
        this.attributes = attributes;
        return this;
    }

    /**
     * Get the description property: Localized descriptions for the property.
     *
     * @return the description value.
     */
    public Map<String, String> description() {
        return this.description;
    }

    /**
     * Set the description property: Localized descriptions for the property.
     *
     * @param description the description value to set.
     * @return the MetadataDefinitionBase object itself.
     */
    public MetadataDefinitionBase withDescription(Map<String, String> description) {
        this.description = description;
        return this;
    }

    /**
     * Get the displayName property: Localized display names for the property.
     *
     * @return the displayName value.
     */
    public Map<String, String> displayName() {
        return this.displayName;
    }

    /**
     * Set the displayName property: Localized display names for the property.
     *
     * @param displayName the displayName value to set.
     * @return the MetadataDefinitionBase object itself.
     */
    public MetadataDefinitionBase withDisplayName(Map<String, String> displayName) {
        this.displayName = displayName;
        return this;
    }

    /**
     * Get the localizedAttributes property: Any custom localized attributes for the Type.
     *
     * @return the localizedAttributes value.
     */
    public Map<String, Map<String, String>> localizedAttributes() {
        return this.localizedAttributes;
    }

    /**
     * Set the localizedAttributes property: Any custom localized attributes for the Type.
     *
     * @param localizedAttributes the localizedAttributes value to set.
     * @return the MetadataDefinitionBase object itself.
     */
    public MetadataDefinitionBase withLocalizedAttributes(Map<String, Map<String, String>> localizedAttributes) {
        this.localizedAttributes = localizedAttributes;
        return this;
    }

    /**
     * Get the smallImage property: Small Image associated with the Property or EntityType.
     *
     * @return the smallImage value.
     */
    public String smallImage() {
        return this.smallImage;
    }

    /**
     * Set the smallImage property: Small Image associated with the Property or EntityType.
     *
     * @param smallImage the smallImage value to set.
     * @return the MetadataDefinitionBase object itself.
     */
    public MetadataDefinitionBase withSmallImage(String smallImage) {
        this.smallImage = smallImage;
        return this;
    }

    /**
     * Get the mediumImage property: Medium Image associated with the Property or EntityType.
     *
     * @return the mediumImage value.
     */
    public String mediumImage() {
        return this.mediumImage;
    }

    /**
     * Set the mediumImage property: Medium Image associated with the Property or EntityType.
     *
     * @param mediumImage the mediumImage value to set.
     * @return the MetadataDefinitionBase object itself.
     */
    public MetadataDefinitionBase withMediumImage(String mediumImage) {
        this.mediumImage = mediumImage;
        return this;
    }

    /**
     * Get the largeImage property: Large Image associated with the Property or EntityType.
     *
     * @return the largeImage value.
     */
    public String largeImage() {
        return this.largeImage;
    }

    /**
     * Set the largeImage property: Large Image associated with the Property or EntityType.
     *
     * @param largeImage the largeImage value to set.
     * @return the MetadataDefinitionBase object itself.
     */
    public MetadataDefinitionBase withLargeImage(String largeImage) {
        this.largeImage = largeImage;
        return this;
    }

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