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

package com.azure.resourcemanager.security.fluent.models;

import com.azure.core.annotation.Fluent;
import com.azure.resourcemanager.security.models.AssessmentType;
import com.azure.resourcemanager.security.models.Categories;
import com.azure.resourcemanager.security.models.ImplementationEffort;
import com.azure.resourcemanager.security.models.SecurityAssessmentMetadataPartnerData;
import com.azure.resourcemanager.security.models.SecurityAssessmentMetadataPropertiesResponsePublishDates;
import com.azure.resourcemanager.security.models.Severity;
import com.azure.resourcemanager.security.models.Tactics;
import com.azure.resourcemanager.security.models.Techniques;
import com.azure.resourcemanager.security.models.Threats;
import com.azure.resourcemanager.security.models.UserImpact;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;

/** Describes properties of an assessment metadata response. */
@Fluent
public final class SecurityAssessmentMetadataPropertiesResponse extends SecurityAssessmentMetadataProperties {
    /*
     * The publishDates property.
     */
    @JsonProperty(value = "publishDates")
    private SecurityAssessmentMetadataPropertiesResponsePublishDates publishDates;

    /*
     * The plannedDeprecationDate property.
     */
    @JsonProperty(value = "plannedDeprecationDate")
    private String plannedDeprecationDate;

    /*
     * The tactics property.
     */
    @JsonProperty(value = "tactics")
    private List<Tactics> tactics;

    /*
     * The techniques property.
     */
    @JsonProperty(value = "techniques")
    private List<Techniques> techniques;

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

    /**
     * Get the publishDates property: The publishDates property.
     *
     * @return the publishDates value.
     */
    public SecurityAssessmentMetadataPropertiesResponsePublishDates publishDates() {
        return this.publishDates;
    }

    /**
     * Set the publishDates property: The publishDates property.
     *
     * @param publishDates the publishDates value to set.
     * @return the SecurityAssessmentMetadataPropertiesResponse object itself.
     */
    public SecurityAssessmentMetadataPropertiesResponse withPublishDates(
        SecurityAssessmentMetadataPropertiesResponsePublishDates publishDates) {
        this.publishDates = publishDates;
        return this;
    }

    /**
     * Get the plannedDeprecationDate property: The plannedDeprecationDate property.
     *
     * @return the plannedDeprecationDate value.
     */
    public String plannedDeprecationDate() {
        return this.plannedDeprecationDate;
    }

    /**
     * Set the plannedDeprecationDate property: The plannedDeprecationDate property.
     *
     * @param plannedDeprecationDate the plannedDeprecationDate value to set.
     * @return the SecurityAssessmentMetadataPropertiesResponse object itself.
     */
    public SecurityAssessmentMetadataPropertiesResponse withPlannedDeprecationDate(String plannedDeprecationDate) {
        this.plannedDeprecationDate = plannedDeprecationDate;
        return this;
    }

    /**
     * Get the tactics property: The tactics property.
     *
     * @return the tactics value.
     */
    public List<Tactics> tactics() {
        return this.tactics;
    }

    /**
     * Set the tactics property: The tactics property.
     *
     * @param tactics the tactics value to set.
     * @return the SecurityAssessmentMetadataPropertiesResponse object itself.
     */
    public SecurityAssessmentMetadataPropertiesResponse withTactics(List<Tactics> tactics) {
        this.tactics = tactics;
        return this;
    }

    /**
     * Get the techniques property: The techniques property.
     *
     * @return the techniques value.
     */
    public List<Techniques> techniques() {
        return this.techniques;
    }

    /**
     * Set the techniques property: The techniques property.
     *
     * @param techniques the techniques value to set.
     * @return the SecurityAssessmentMetadataPropertiesResponse object itself.
     */
    public SecurityAssessmentMetadataPropertiesResponse withTechniques(List<Techniques> techniques) {
        this.techniques = techniques;
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public SecurityAssessmentMetadataPropertiesResponse withDisplayName(String displayName) {
        super.withDisplayName(displayName);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public SecurityAssessmentMetadataPropertiesResponse withDescription(String description) {
        super.withDescription(description);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public SecurityAssessmentMetadataPropertiesResponse withRemediationDescription(String remediationDescription) {
        super.withRemediationDescription(remediationDescription);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public SecurityAssessmentMetadataPropertiesResponse withCategories(List<Categories> categories) {
        super.withCategories(categories);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public SecurityAssessmentMetadataPropertiesResponse withSeverity(Severity severity) {
        super.withSeverity(severity);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public SecurityAssessmentMetadataPropertiesResponse withUserImpact(UserImpact userImpact) {
        super.withUserImpact(userImpact);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public SecurityAssessmentMetadataPropertiesResponse withImplementationEffort(
        ImplementationEffort implementationEffort) {
        super.withImplementationEffort(implementationEffort);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public SecurityAssessmentMetadataPropertiesResponse withThreats(List<Threats> threats) {
        super.withThreats(threats);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public SecurityAssessmentMetadataPropertiesResponse withPreview(Boolean preview) {
        super.withPreview(preview);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public SecurityAssessmentMetadataPropertiesResponse withAssessmentType(AssessmentType assessmentType) {
        super.withAssessmentType(assessmentType);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public SecurityAssessmentMetadataPropertiesResponse withPartnerData(
        SecurityAssessmentMetadataPartnerData partnerData) {
        super.withPartnerData(partnerData);
        return this;
    }

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