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

package com.azure.resourcemanager.videoanalyzer.models;

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

/**
 * Video flags contain information about the available video actions and its dynamic properties based on the current
 * video state.
 */
@Fluent
public final class VideoFlags {
    /*
     * Value indicating whether or not the video can be streamed. Only
     * "archive" type videos can be streamed.
     */
    @JsonProperty(value = "canStream", required = true)
    private boolean canStream;

    /*
     * Value indicating whether or not there has ever been data recorded or
     * uploaded into the video. Newly created videos have this value set to
     * false.
     */
    @JsonProperty(value = "hasData", required = true)
    private boolean hasData;

    /*
     * Value indicating whether or not the video is currently being referenced
     * be an active pipeline. The fact that is being referenced, doesn't
     * necessarily indicate that data is being received. For example, video
     * recording may be gated on events or camera may not be accessible at the
     * time.
     */
    @JsonProperty(value = "isInUse", required = true)
    private boolean isInUse;

    /**
     * Get the canStream property: Value indicating whether or not the video can be streamed. Only "archive" type videos
     * can be streamed.
     *
     * @return the canStream value.
     */
    public boolean canStream() {
        return this.canStream;
    }

    /**
     * Set the canStream property: Value indicating whether or not the video can be streamed. Only "archive" type videos
     * can be streamed.
     *
     * @param canStream the canStream value to set.
     * @return the VideoFlags object itself.
     */
    public VideoFlags withCanStream(boolean canStream) {
        this.canStream = canStream;
        return this;
    }

    /**
     * Get the hasData property: Value indicating whether or not there has ever been data recorded or uploaded into the
     * video. Newly created videos have this value set to false.
     *
     * @return the hasData value.
     */
    public boolean hasData() {
        return this.hasData;
    }

    /**
     * Set the hasData property: Value indicating whether or not there has ever been data recorded or uploaded into the
     * video. Newly created videos have this value set to false.
     *
     * @param hasData the hasData value to set.
     * @return the VideoFlags object itself.
     */
    public VideoFlags withHasData(boolean hasData) {
        this.hasData = hasData;
        return this;
    }

    /**
     * Get the isInUse property: Value indicating whether or not the video is currently being referenced be an active
     * pipeline. The fact that is being referenced, doesn't necessarily indicate that data is being received. For
     * example, video recording may be gated on events or camera may not be accessible at the time.
     *
     * @return the isInUse value.
     */
    public boolean isInUse() {
        return this.isInUse;
    }

    /**
     * Set the isInUse property: Value indicating whether or not the video is currently being referenced be an active
     * pipeline. The fact that is being referenced, doesn't necessarily indicate that data is being received. For
     * example, video recording may be gated on events or camera may not be accessible at the time.
     *
     * @param isInUse the isInUse value to set.
     * @return the VideoFlags object itself.
     */
    public VideoFlags withIsInUse(boolean isInUse) {
        this.isInUse = isInUse;
        return this;
    }

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