# coding: utf-8
# Copyright (c) 2016, 2026, Oracle and/or its affiliates.  All rights reserved.
# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.

# NOTE: This class is auto generated by OracleSDKGenerator. DO NOT EDIT. API Version: 20251101


from oci.util import formatted_flat_dict, NONE_SENTINEL, value_allowed_none_or_none_sentinel  # noqa: F401
from oci.decorators import init_model_state_from_kwargs


@init_model_state_from_kwargs
class StorageCapacityDetails(object):
    """
    Capacity details of the Storage disk group.
    """

    #: A constant which can be used with the storage_disk_redundancy property of a StorageCapacityDetails.
    #: This constant has a value of "HIGH"
    STORAGE_DISK_REDUNDANCY_HIGH = "HIGH"

    #: A constant which can be used with the storage_disk_redundancy property of a StorageCapacityDetails.
    #: This constant has a value of "MIRROR"
    STORAGE_DISK_REDUNDANCY_MIRROR = "MIRROR"

    #: A constant which can be used with the storage_disk_redundancy property of a StorageCapacityDetails.
    #: This constant has a value of "FLEX"
    STORAGE_DISK_REDUNDANCY_FLEX = "FLEX"

    def __init__(self, **kwargs):
        """
        Initializes a new StorageCapacityDetails object with values from keyword arguments.
        The following keyword arguments are supported (corresponding to the getters/setters of this class):

        :param storage_disk_redundancy:
            The value to assign to the storage_disk_redundancy property of this StorageCapacityDetails.
            Allowed values for this property are: "HIGH", "MIRROR", "FLEX", 'UNKNOWN_ENUM_VALUE'.
            Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
        :type storage_disk_redundancy: str

        :param disk_group:
            The value to assign to the disk_group property of this StorageCapacityDetails.
        :type disk_group: str

        :param phy_total_space_in_gbs:
            The value to assign to the phy_total_space_in_gbs property of this StorageCapacityDetails.
        :type phy_total_space_in_gbs: int

        :param phy_reserved_space_in_gbs:
            The value to assign to the phy_reserved_space_in_gbs property of this StorageCapacityDetails.
        :type phy_reserved_space_in_gbs: int

        :param phy_free_space_in_gbs:
            The value to assign to the phy_free_space_in_gbs property of this StorageCapacityDetails.
        :type phy_free_space_in_gbs: int

        :param logical_free_space_in_gbs:
            The value to assign to the logical_free_space_in_gbs property of this StorageCapacityDetails.
        :type logical_free_space_in_gbs: int

        """
        self.swagger_types = {
            'storage_disk_redundancy': 'str',
            'disk_group': 'str',
            'phy_total_space_in_gbs': 'int',
            'phy_reserved_space_in_gbs': 'int',
            'phy_free_space_in_gbs': 'int',
            'logical_free_space_in_gbs': 'int'
        }
        self.attribute_map = {
            'storage_disk_redundancy': 'storageDiskRedundancy',
            'disk_group': 'diskGroup',
            'phy_total_space_in_gbs': 'phyTotalSpaceInGBs',
            'phy_reserved_space_in_gbs': 'phyReservedSpaceInGBs',
            'phy_free_space_in_gbs': 'phyFreeSpaceInGBs',
            'logical_free_space_in_gbs': 'logicalFreeSpaceInGBs'
        }
        self._storage_disk_redundancy = None
        self._disk_group = None
        self._phy_total_space_in_gbs = None
        self._phy_reserved_space_in_gbs = None
        self._phy_free_space_in_gbs = None
        self._logical_free_space_in_gbs = None

    @property
    def storage_disk_redundancy(self):
        """
        Gets the storage_disk_redundancy of this StorageCapacityDetails.
        The Disk redundancy for Database Infrastructure storage.

        Allowed values for this property are: "HIGH", "MIRROR", "FLEX", 'UNKNOWN_ENUM_VALUE'.
        Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.


        :return: The storage_disk_redundancy of this StorageCapacityDetails.
        :rtype: str
        """
        return self._storage_disk_redundancy

    @storage_disk_redundancy.setter
    def storage_disk_redundancy(self, storage_disk_redundancy):
        """
        Sets the storage_disk_redundancy of this StorageCapacityDetails.
        The Disk redundancy for Database Infrastructure storage.


        :param storage_disk_redundancy: The storage_disk_redundancy of this StorageCapacityDetails.
        :type: str
        """
        allowed_values = ["HIGH", "MIRROR", "FLEX"]
        if not value_allowed_none_or_none_sentinel(storage_disk_redundancy, allowed_values):
            storage_disk_redundancy = 'UNKNOWN_ENUM_VALUE'
        self._storage_disk_redundancy = storage_disk_redundancy

    @property
    def disk_group(self):
        """
        Gets the disk_group of this StorageCapacityDetails.
        Disk group name.


        :return: The disk_group of this StorageCapacityDetails.
        :rtype: str
        """
        return self._disk_group

    @disk_group.setter
    def disk_group(self, disk_group):
        """
        Sets the disk_group of this StorageCapacityDetails.
        Disk group name.


        :param disk_group: The disk_group of this StorageCapacityDetails.
        :type: str
        """
        self._disk_group = disk_group

    @property
    def phy_total_space_in_gbs(self):
        """
        Gets the phy_total_space_in_gbs of this StorageCapacityDetails.
        The total amount of physical disk space available in a disk group, in gigabytes (GB).


        :return: The phy_total_space_in_gbs of this StorageCapacityDetails.
        :rtype: int
        """
        return self._phy_total_space_in_gbs

    @phy_total_space_in_gbs.setter
    def phy_total_space_in_gbs(self, phy_total_space_in_gbs):
        """
        Sets the phy_total_space_in_gbs of this StorageCapacityDetails.
        The total amount of physical disk space available in a disk group, in gigabytes (GB).


        :param phy_total_space_in_gbs: The phy_total_space_in_gbs of this StorageCapacityDetails.
        :type: int
        """
        self._phy_total_space_in_gbs = phy_total_space_in_gbs

    @property
    def phy_reserved_space_in_gbs(self):
        """
        Gets the phy_reserved_space_in_gbs of this StorageCapacityDetails.
        The total amount of physical disk space that is reserved for system use in a disk group, in gigabytes (GB).


        :return: The phy_reserved_space_in_gbs of this StorageCapacityDetails.
        :rtype: int
        """
        return self._phy_reserved_space_in_gbs

    @phy_reserved_space_in_gbs.setter
    def phy_reserved_space_in_gbs(self, phy_reserved_space_in_gbs):
        """
        Sets the phy_reserved_space_in_gbs of this StorageCapacityDetails.
        The total amount of physical disk space that is reserved for system use in a disk group, in gigabytes (GB).


        :param phy_reserved_space_in_gbs: The phy_reserved_space_in_gbs of this StorageCapacityDetails.
        :type: int
        """
        self._phy_reserved_space_in_gbs = phy_reserved_space_in_gbs

    @property
    def phy_free_space_in_gbs(self):
        """
        Gets the phy_free_space_in_gbs of this StorageCapacityDetails.
        The total amount of physical disk space that is currently available for use in a disk group, in gigabytes (GB).


        :return: The phy_free_space_in_gbs of this StorageCapacityDetails.
        :rtype: int
        """
        return self._phy_free_space_in_gbs

    @phy_free_space_in_gbs.setter
    def phy_free_space_in_gbs(self, phy_free_space_in_gbs):
        """
        Sets the phy_free_space_in_gbs of this StorageCapacityDetails.
        The total amount of physical disk space that is currently available for use in a disk group, in gigabytes (GB).


        :param phy_free_space_in_gbs: The phy_free_space_in_gbs of this StorageCapacityDetails.
        :type: int
        """
        self._phy_free_space_in_gbs = phy_free_space_in_gbs

    @property
    def logical_free_space_in_gbs(self):
        """
        Gets the logical_free_space_in_gbs of this StorageCapacityDetails.
        The total amount of logical disk space that is currently available for use in a disk group, in gigabytes (GB).


        :return: The logical_free_space_in_gbs of this StorageCapacityDetails.
        :rtype: int
        """
        return self._logical_free_space_in_gbs

    @logical_free_space_in_gbs.setter
    def logical_free_space_in_gbs(self, logical_free_space_in_gbs):
        """
        Sets the logical_free_space_in_gbs of this StorageCapacityDetails.
        The total amount of logical disk space that is currently available for use in a disk group, in gigabytes (GB).


        :param logical_free_space_in_gbs: The logical_free_space_in_gbs of this StorageCapacityDetails.
        :type: int
        """
        self._logical_free_space_in_gbs = logical_free_space_in_gbs

    def __repr__(self):
        return formatted_flat_dict(self)

    def __eq__(self, other):
        if other is None:
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not self == other
