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

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

import com.azure.core.annotation.Immutable;
import com.azure.core.util.logging.ClientLogger;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.math.BigDecimal;
import java.time.OffsetDateTime;
import java.util.UUID;

/** The properties of a legacy reservation transaction. */
@Immutable
public final class LegacyReservationTransactionProperties {
    @JsonIgnore private final ClientLogger logger = new ClientLogger(LegacyReservationTransactionProperties.class);

    /*
     * The date of the transaction
     */
    @JsonProperty(value = "eventDate", access = JsonProperty.Access.WRITE_ONLY)
    private OffsetDateTime eventDate;

    /*
     * The reservation order ID is the identifier for a reservation purchase.
     * Each reservation order ID represents a single purchase transaction. A
     * reservation order contains reservations. The reservation order specifies
     * the VM size and region for the reservations.
     */
    @JsonProperty(value = "reservationOrderId", access = JsonProperty.Access.WRITE_ONLY)
    private String reservationOrderId;

    /*
     * The description of the transaction.
     */
    @JsonProperty(value = "description", access = JsonProperty.Access.WRITE_ONLY)
    private String description;

    /*
     * The type of the transaction (Purchase, Cancel, etc.)
     */
    @JsonProperty(value = "eventType", access = JsonProperty.Access.WRITE_ONLY)
    private String eventType;

    /*
     * The quantity of the transaction.
     */
    @JsonProperty(value = "quantity", access = JsonProperty.Access.WRITE_ONLY)
    private BigDecimal quantity;

    /*
     * The charge of the transaction.
     */
    @JsonProperty(value = "amount", access = JsonProperty.Access.WRITE_ONLY)
    private BigDecimal amount;

    /*
     * The ISO currency in which the transaction is charged, for example, USD.
     */
    @JsonProperty(value = "currency", access = JsonProperty.Access.WRITE_ONLY)
    private String currency;

    /*
     * The name of the reservation order.
     */
    @JsonProperty(value = "reservationOrderName", access = JsonProperty.Access.WRITE_ONLY)
    private String reservationOrderName;

    /*
     * The purchasing enrollment.
     */
    @JsonProperty(value = "purchasingEnrollment", access = JsonProperty.Access.WRITE_ONLY)
    private String purchasingEnrollment;

    /*
     * The subscription guid that makes the transaction.
     */
    @JsonProperty(value = "purchasingSubscriptionGuid", access = JsonProperty.Access.WRITE_ONLY)
    private UUID purchasingSubscriptionGuid;

    /*
     * The subscription name that makes the transaction.
     */
    @JsonProperty(value = "purchasingSubscriptionName", access = JsonProperty.Access.WRITE_ONLY)
    private String purchasingSubscriptionName;

    /*
     * This is the ARM Sku name. It can be used to join with the serviceType
     * field in additional info in usage records.
     */
    @JsonProperty(value = "armSkuName", access = JsonProperty.Access.WRITE_ONLY)
    private String armSkuName;

    /*
     * This is the term of the transaction.
     */
    @JsonProperty(value = "term", access = JsonProperty.Access.WRITE_ONLY)
    private String term;

    /*
     * The region of the transaction.
     */
    @JsonProperty(value = "region", access = JsonProperty.Access.WRITE_ONLY)
    private String region;

    /*
     * The name of the account that makes the transaction.
     */
    @JsonProperty(value = "accountName", access = JsonProperty.Access.WRITE_ONLY)
    private String accountName;

    /*
     * The email of the account owner that makes the transaction.
     */
    @JsonProperty(value = "accountOwnerEmail", access = JsonProperty.Access.WRITE_ONLY)
    private String accountOwnerEmail;

    /*
     * The department name.
     */
    @JsonProperty(value = "departmentName", access = JsonProperty.Access.WRITE_ONLY)
    private String departmentName;

    /*
     * The cost center of this department if it is a department and a cost
     * center is provided.
     */
    @JsonProperty(value = "costCenter", access = JsonProperty.Access.WRITE_ONLY)
    private String costCenter;

    /*
     * The current enrollment.
     */
    @JsonProperty(value = "currentEnrollment", access = JsonProperty.Access.WRITE_ONLY)
    private String currentEnrollment;

    /*
     * The billing frequency, which can be either one-time or recurring.
     */
    @JsonProperty(value = "billingFrequency", access = JsonProperty.Access.WRITE_ONLY)
    private String billingFrequency;

    /*
     * The billing month(yyyyMMdd), on which the event initiated.
     */
    @JsonProperty(value = "billingMonth", access = JsonProperty.Access.WRITE_ONLY)
    private Integer billingMonth;

    /*
     * The monetary commitment amount at the enrollment scope.
     */
    @JsonProperty(value = "monetaryCommitment", access = JsonProperty.Access.WRITE_ONLY)
    private BigDecimal monetaryCommitment;

    /*
     * The overage amount at the enrollment scope.
     */
    @JsonProperty(value = "overage", access = JsonProperty.Access.WRITE_ONLY)
    private BigDecimal overage;

    /**
     * Get the eventDate property: The date of the transaction.
     *
     * @return the eventDate value.
     */
    public OffsetDateTime eventDate() {
        return this.eventDate;
    }

    /**
     * Get the reservationOrderId property: The reservation order ID is the identifier for a reservation purchase. Each
     * reservation order ID represents a single purchase transaction. A reservation order contains reservations. The
     * reservation order specifies the VM size and region for the reservations.
     *
     * @return the reservationOrderId value.
     */
    public String reservationOrderId() {
        return this.reservationOrderId;
    }

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

    /**
     * Get the eventType property: The type of the transaction (Purchase, Cancel, etc.).
     *
     * @return the eventType value.
     */
    public String eventType() {
        return this.eventType;
    }

    /**
     * Get the quantity property: The quantity of the transaction.
     *
     * @return the quantity value.
     */
    public BigDecimal quantity() {
        return this.quantity;
    }

    /**
     * Get the amount property: The charge of the transaction.
     *
     * @return the amount value.
     */
    public BigDecimal amount() {
        return this.amount;
    }

    /**
     * Get the currency property: The ISO currency in which the transaction is charged, for example, USD.
     *
     * @return the currency value.
     */
    public String currency() {
        return this.currency;
    }

    /**
     * Get the reservationOrderName property: The name of the reservation order.
     *
     * @return the reservationOrderName value.
     */
    public String reservationOrderName() {
        return this.reservationOrderName;
    }

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

    /**
     * Get the purchasingSubscriptionGuid property: The subscription guid that makes the transaction.
     *
     * @return the purchasingSubscriptionGuid value.
     */
    public UUID purchasingSubscriptionGuid() {
        return this.purchasingSubscriptionGuid;
    }

    /**
     * Get the purchasingSubscriptionName property: The subscription name that makes the transaction.
     *
     * @return the purchasingSubscriptionName value.
     */
    public String purchasingSubscriptionName() {
        return this.purchasingSubscriptionName;
    }

    /**
     * Get the armSkuName property: This is the ARM Sku name. It can be used to join with the serviceType field in
     * additional info in usage records.
     *
     * @return the armSkuName value.
     */
    public String armSkuName() {
        return this.armSkuName;
    }

    /**
     * Get the term property: This is the term of the transaction.
     *
     * @return the term value.
     */
    public String term() {
        return this.term;
    }

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

    /**
     * Get the accountName property: The name of the account that makes the transaction.
     *
     * @return the accountName value.
     */
    public String accountName() {
        return this.accountName;
    }

    /**
     * Get the accountOwnerEmail property: The email of the account owner that makes the transaction.
     *
     * @return the accountOwnerEmail value.
     */
    public String accountOwnerEmail() {
        return this.accountOwnerEmail;
    }

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

    /**
     * Get the costCenter property: The cost center of this department if it is a department and a cost center is
     * provided.
     *
     * @return the costCenter value.
     */
    public String costCenter() {
        return this.costCenter;
    }

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

    /**
     * Get the billingFrequency property: The billing frequency, which can be either one-time or recurring.
     *
     * @return the billingFrequency value.
     */
    public String billingFrequency() {
        return this.billingFrequency;
    }

    /**
     * Get the billingMonth property: The billing month(yyyyMMdd), on which the event initiated.
     *
     * @return the billingMonth value.
     */
    public Integer billingMonth() {
        return this.billingMonth;
    }

    /**
     * Get the monetaryCommitment property: The monetary commitment amount at the enrollment scope.
     *
     * @return the monetaryCommitment value.
     */
    public BigDecimal monetaryCommitment() {
        return this.monetaryCommitment;
    }

    /**
     * Get the overage property: The overage amount at the enrollment scope.
     *
     * @return the overage value.
     */
    public BigDecimal overage() {
        return this.overage;
    }

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