/**
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 *
 * Code generated by Microsoft (R) AutoRest Code Generator.
 */

package com.microsoft.azure.cognitiveservices.vision.faceapi.models;

import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * Face Attributes.
 */
public class FaceAttributes {
    /**
     * Age in years.
     */
    @JsonProperty(value = "age")
    private Double age;

    /**
     * Possible gender of the face. Possible values include: 'male', 'female',
     * 'genderless'.
     */
    @JsonProperty(value = "gender")
    private Gender gender;

    /**
     * Smile intensity, a number between [0,1].
     */
    @JsonProperty(value = "smile")
    private Double smile;

    /**
     * Properties describing facial hair attributes.
     */
    @JsonProperty(value = "facialHair")
    private FacialHair facialHair;

    /**
     * Glasses type if any of the face. Possible values include: 'noGlasses',
     * 'readingGlasses', 'sunglasses', 'swimmingGoggles'.
     */
    @JsonProperty(value = "glasses")
    private GlassesType glasses;

    /**
     * Properties indicating head pose of the face.
     */
    @JsonProperty(value = "headPose")
    private HeadPose headPose;

    /**
     * Properties describing facial emotion in form of confidence ranging from
     * 0 to 1.
     */
    @JsonProperty(value = "emotion")
    private Emotion emotion;

    /**
     * Properties describing hair attributes.
     */
    @JsonProperty(value = "hair")
    private Hair hair;

    /**
     * Properties describing present makeups on a given face.
     */
    @JsonProperty(value = "makeup")
    private Makeup makeup;

    /**
     * Properties describing occlusions on a given face.
     */
    @JsonProperty(value = "occlusion")
    private Occlusion occlusion;

    /**
     * Properties describing any accessories on a given face.
     */
    @JsonProperty(value = "accessories")
    private List<Accessory> accessories;

    /**
     * Properties describing any presence of blur within the image.
     */
    @JsonProperty(value = "blur")
    private Blur blur;

    /**
     * Properties describing exposure level of the image.
     */
    @JsonProperty(value = "exposure")
    private Exposure exposure;

    /**
     * Properties describing noise level of the image.
     */
    @JsonProperty(value = "noise")
    private Noise noise;

    /**
     * Get the age value.
     *
     * @return the age value
     */
    public Double age() {
        return this.age;
    }

    /**
     * Set the age value.
     *
     * @param age the age value to set
     * @return the FaceAttributes object itself.
     */
    public FaceAttributes withAge(Double age) {
        this.age = age;
        return this;
    }

    /**
     * Get the gender value.
     *
     * @return the gender value
     */
    public Gender gender() {
        return this.gender;
    }

    /**
     * Set the gender value.
     *
     * @param gender the gender value to set
     * @return the FaceAttributes object itself.
     */
    public FaceAttributes withGender(Gender gender) {
        this.gender = gender;
        return this;
    }

    /**
     * Get the smile value.
     *
     * @return the smile value
     */
    public Double smile() {
        return this.smile;
    }

    /**
     * Set the smile value.
     *
     * @param smile the smile value to set
     * @return the FaceAttributes object itself.
     */
    public FaceAttributes withSmile(Double smile) {
        this.smile = smile;
        return this;
    }

    /**
     * Get the facialHair value.
     *
     * @return the facialHair value
     */
    public FacialHair facialHair() {
        return this.facialHair;
    }

    /**
     * Set the facialHair value.
     *
     * @param facialHair the facialHair value to set
     * @return the FaceAttributes object itself.
     */
    public FaceAttributes withFacialHair(FacialHair facialHair) {
        this.facialHair = facialHair;
        return this;
    }

    /**
     * Get the glasses value.
     *
     * @return the glasses value
     */
    public GlassesType glasses() {
        return this.glasses;
    }

    /**
     * Set the glasses value.
     *
     * @param glasses the glasses value to set
     * @return the FaceAttributes object itself.
     */
    public FaceAttributes withGlasses(GlassesType glasses) {
        this.glasses = glasses;
        return this;
    }

    /**
     * Get the headPose value.
     *
     * @return the headPose value
     */
    public HeadPose headPose() {
        return this.headPose;
    }

    /**
     * Set the headPose value.
     *
     * @param headPose the headPose value to set
     * @return the FaceAttributes object itself.
     */
    public FaceAttributes withHeadPose(HeadPose headPose) {
        this.headPose = headPose;
        return this;
    }

    /**
     * Get the emotion value.
     *
     * @return the emotion value
     */
    public Emotion emotion() {
        return this.emotion;
    }

    /**
     * Set the emotion value.
     *
     * @param emotion the emotion value to set
     * @return the FaceAttributes object itself.
     */
    public FaceAttributes withEmotion(Emotion emotion) {
        this.emotion = emotion;
        return this;
    }

    /**
     * Get the hair value.
     *
     * @return the hair value
     */
    public Hair hair() {
        return this.hair;
    }

    /**
     * Set the hair value.
     *
     * @param hair the hair value to set
     * @return the FaceAttributes object itself.
     */
    public FaceAttributes withHair(Hair hair) {
        this.hair = hair;
        return this;
    }

    /**
     * Get the makeup value.
     *
     * @return the makeup value
     */
    public Makeup makeup() {
        return this.makeup;
    }

    /**
     * Set the makeup value.
     *
     * @param makeup the makeup value to set
     * @return the FaceAttributes object itself.
     */
    public FaceAttributes withMakeup(Makeup makeup) {
        this.makeup = makeup;
        return this;
    }

    /**
     * Get the occlusion value.
     *
     * @return the occlusion value
     */
    public Occlusion occlusion() {
        return this.occlusion;
    }

    /**
     * Set the occlusion value.
     *
     * @param occlusion the occlusion value to set
     * @return the FaceAttributes object itself.
     */
    public FaceAttributes withOcclusion(Occlusion occlusion) {
        this.occlusion = occlusion;
        return this;
    }

    /**
     * Get the accessories value.
     *
     * @return the accessories value
     */
    public List<Accessory> accessories() {
        return this.accessories;
    }

    /**
     * Set the accessories value.
     *
     * @param accessories the accessories value to set
     * @return the FaceAttributes object itself.
     */
    public FaceAttributes withAccessories(List<Accessory> accessories) {
        this.accessories = accessories;
        return this;
    }

    /**
     * Get the blur value.
     *
     * @return the blur value
     */
    public Blur blur() {
        return this.blur;
    }

    /**
     * Set the blur value.
     *
     * @param blur the blur value to set
     * @return the FaceAttributes object itself.
     */
    public FaceAttributes withBlur(Blur blur) {
        this.blur = blur;
        return this;
    }

    /**
     * Get the exposure value.
     *
     * @return the exposure value
     */
    public Exposure exposure() {
        return this.exposure;
    }

    /**
     * Set the exposure value.
     *
     * @param exposure the exposure value to set
     * @return the FaceAttributes object itself.
     */
    public FaceAttributes withExposure(Exposure exposure) {
        this.exposure = exposure;
        return this;
    }

    /**
     * Get the noise value.
     *
     * @return the noise value
     */
    public Noise noise() {
        return this.noise;
    }

    /**
     * Set the noise value.
     *
     * @param noise the noise value to set
     * @return the FaceAttributes object itself.
     */
    public FaceAttributes withNoise(Noise noise) {
        this.noise = noise;
        return this;
    }

}
