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

package com.azure.analytics.purview.sharing.models;

import java.time.OffsetDateTime;
import java.util.List;
import java.util.UUID;

import com.azure.core.annotation.Fluent;
import com.azure.core.annotation.JsonFlatten;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeName;

/**
 * An InPlace share kind.
 */
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "shareKind")
@JsonTypeName("InPlace")
@JsonFlatten
@Fluent
public class InPlaceSentShare extends SentShare {
    /*
     * A class for sent share artifact.
     */
    @JsonProperty(value = "properties.artifact", required = true)
    private Artifact artifact;

    /*
     * Time at which the sent share was created. Represented in the standard date-time format as defined by [RFC
     * 3339](https://www.rfc-editor.org/rfc/rfc3339)
     */
    @JsonProperty(value = "properties.createdAt", access = JsonProperty.Access.WRITE_ONLY)
    private OffsetDateTime createdAt;

    /*
     * List of shares on which the sent share depends.
     */
    @JsonProperty(value = "properties.dependsOn", access = JsonProperty.Access.WRITE_ONLY)
    private List<UUID> dependsOn;

    /*
     * Sent share description.
     */
    @JsonProperty(value = "properties.description")
    private String description;

    /*
     * The name of the sent share
     */
    @JsonProperty(value = "properties.displayName", required = true)
    private String displayName;

    /*
     * Email of the sender who created the sent share.
     */
    @JsonProperty(value = "properties.senderEmail", access = JsonProperty.Access.WRITE_ONLY)
    private String senderEmail;

    /*
     * Name of the sender who created the sent share.
     */
    @JsonProperty(value = "properties.senderName", access = JsonProperty.Access.WRITE_ONLY)
    private String senderName;

    /*
     * Tenant name of the sender who created the sent share.
     */
    @JsonProperty(value = "properties.senderTenantName", access = JsonProperty.Access.WRITE_ONLY)
    private String senderTenantName;

    /*
     * State of the resource
     */
    @JsonProperty(value = "properties.state", access = JsonProperty.Access.WRITE_ONLY)
    private State state;

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

    /**
     * Get the artifact property: A class for sent share artifact.
     * 
     * @return the artifact value.
     */
    public Artifact getArtifact() {
        return this.artifact;
    }

    /**
     * Set the artifact property: A class for sent share artifact.
     * 
     * @param artifact the artifact value to set.
     * @return the InPlaceSentShare object itself.
     */
    public InPlaceSentShare setArtifact(Artifact artifact) {
        this.artifact = artifact;
        return this;
    }

    /**
     * Get the createdAt property: Time at which the sent share was created. Represented in the standard date-time
     * format as defined by [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339).
     * 
     * @return the createdAt value.
     */
    public OffsetDateTime getCreatedAt() {
        return this.createdAt;
    }

    /**
     * Get the dependsOn property: List of shares on which the sent share depends.
     * 
     * @return the dependsOn value.
     */
    public List<UUID> getDependsOn() {
        return this.dependsOn;
    }

    /**
     * Get the description property: Sent share description.
     * 
     * @return the description value.
     */
    public String getDescription() {
        return this.description;
    }

    /**
     * Set the description property: Sent share description.
     * 
     * @param description the description value to set.
     * @return the InPlaceSentShare object itself.
     */
    public InPlaceSentShare setDescription(String description) {
        this.description = description;
        return this;
    }

    /**
     * Get the displayName property: The name of the sent share.
     * 
     * @return the displayName value.
     */
    public String getDisplayName() {
        return this.displayName;
    }

    /**
     * Set the displayName property: The name of the sent share.
     * 
     * @param displayName the displayName value to set.
     * @return the InPlaceSentShare object itself.
     */
    public InPlaceSentShare setDisplayName(String displayName) {
        this.displayName = displayName;
        return this;
    }

    /**
     * Get the senderEmail property: Email of the sender who created the sent share.
     * 
     * @return the senderEmail value.
     */
    public String getSenderEmail() {
        return this.senderEmail;
    }

    /**
     * Get the senderName property: Name of the sender who created the sent share.
     * 
     * @return the senderName value.
     */
    public String getSenderName() {
        return this.senderName;
    }

    /**
     * Get the senderTenantName property: Tenant name of the sender who created the sent share.
     * 
     * @return the senderTenantName value.
     */
    public String getSenderTenantName() {
        return this.senderTenantName;
    }

    /**
     * Get the state property: State of the resource.
     * 
     * @return the state value.
     */
    public State getState() {
        return this.state;
    }
}
