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

package com.azure.media.videoanalyzer.edge.models;

import com.azure.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * Optional video properties to be used in case a new video resource needs to be created on the service. These will not
 * take effect if the video already exists.
 */
@Fluent
public final class VideoCreationProperties {
    /*
     * Optional video title provided by the user. Value can be up to 256
     * characters long.
     */
    @JsonProperty(value = "title")
    private String title;

    /*
     * Optional video description provided by the user. Value can be up to 2048
     * characters long.
     */
    @JsonProperty(value = "description")
    private String description;

    /*
     * Video segment length indicates the length of individual video files
     * (segments) which are persisted to storage. Smaller segments provide
     * lower archive playback latency but generate larger volume of storage
     * transactions. Larger segments reduce the amount of storage transactions
     * while increasing the archive playback latency. Value must be specified
     * in ISO8601 duration format (i.e. "PT30S" equals 30 seconds) and can vary
     * between 30 seconds to 5 minutes, in 30 seconds increments. Changing this
     * value after the video is initially created can lead to errors when
     * uploading media to the archive. Default value is 30 seconds.
     */
    @JsonProperty(value = "segmentLength")
    private String segmentLength;

    /*
     * Video retention period indicates how long the video is kept in storage,
     * and must be a multiple of 1 day. For example, if this is set to 30 days,
     * then content older than 30 days will be deleted.
     */
    @JsonProperty(value = "retentionPeriod")
    private String retentionPeriod;

    /**
     * Get the title property: Optional video title provided by the user. Value can be up to 256 characters long.
     *
     * @return the title value.
     */
    public String getTitle() {
        return this.title;
    }

    /**
     * Set the title property: Optional video title provided by the user. Value can be up to 256 characters long.
     *
     * @param title the title value to set.
     * @return the VideoCreationProperties object itself.
     */
    public VideoCreationProperties setTitle(String title) {
        this.title = title;
        return this;
    }

    /**
     * Get the description property: Optional video description provided by the user. Value can be up to 2048 characters
     * long.
     *
     * @return the description value.
     */
    public String getDescription() {
        return this.description;
    }

    /**
     * Set the description property: Optional video description provided by the user. Value can be up to 2048 characters
     * long.
     *
     * @param description the description value to set.
     * @return the VideoCreationProperties object itself.
     */
    public VideoCreationProperties setDescription(String description) {
        this.description = description;
        return this;
    }

    /**
     * Get the segmentLength property: Video segment length indicates the length of individual video files (segments)
     * which are persisted to storage. Smaller segments provide lower archive playback latency but generate larger
     * volume of storage transactions. Larger segments reduce the amount of storage transactions while increasing the
     * archive playback latency. Value must be specified in ISO8601 duration format (i.e. "PT30S" equals 30 seconds) and
     * can vary between 30 seconds to 5 minutes, in 30 seconds increments. Changing this value after the video is
     * initially created can lead to errors when uploading media to the archive. Default value is 30 seconds.
     *
     * @return the segmentLength value.
     */
    public String getSegmentLength() {
        return this.segmentLength;
    }

    /**
     * Set the segmentLength property: Video segment length indicates the length of individual video files (segments)
     * which are persisted to storage. Smaller segments provide lower archive playback latency but generate larger
     * volume of storage transactions. Larger segments reduce the amount of storage transactions while increasing the
     * archive playback latency. Value must be specified in ISO8601 duration format (i.e. "PT30S" equals 30 seconds) and
     * can vary between 30 seconds to 5 minutes, in 30 seconds increments. Changing this value after the video is
     * initially created can lead to errors when uploading media to the archive. Default value is 30 seconds.
     *
     * @param segmentLength the segmentLength value to set.
     * @return the VideoCreationProperties object itself.
     */
    public VideoCreationProperties setSegmentLength(String segmentLength) {
        this.segmentLength = segmentLength;
        return this;
    }

    /**
     * Get the retentionPeriod property: Video retention period indicates how long the video is kept in storage, and
     * must be a multiple of 1 day. For example, if this is set to 30 days, then content older than 30 days will be
     * deleted.
     *
     * @return the retentionPeriod value.
     */
    public String getRetentionPeriod() {
        return this.retentionPeriod;
    }

    /**
     * Set the retentionPeriod property: Video retention period indicates how long the video is kept in storage, and
     * must be a multiple of 1 day. For example, if this is set to 30 days, then content older than 30 days will be
     * deleted.
     *
     * @param retentionPeriod the retentionPeriod value to set.
     * @return the VideoCreationProperties object itself.
     */
    public VideoCreationProperties setRetentionPeriod(String retentionPeriod) {
        this.retentionPeriod = retentionPeriod;
        return this;
    }
}
