# Copyright 2022, Digi International Inc.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

class ConnectCoreBLEException(Exception):
    """
    Generic ConnectCore BLE exception. This class and its subclasses indicate
    conditions that an application might want to catch when an error occurs.

    All functionality of this class is the inherited of `Exception
    <https://docs.python.org/2/library/exceptions.html?highlight=exceptions.exception#exceptions.Exception>`_.
    """


class BluetoothNotSupportedException(ConnectCoreBLEException):
    """
    This exception is thrown when Bluetooth is not supported by the device in any form,
    either native support or through an XBee device.

    All functionality of this class is the inherited of `Exception
    <https://docs.python.org/2/library/exceptions.html?highlight=exceptions.exception#exceptions.Exception>`_.
    """

    # Constants.
    __DEFAULT_MESSAGE = "Bluetooth is not supported in the system, neither natively nor through an XBee device."

    def __init__(self, message=__DEFAULT_MESSAGE):
        ConnectCoreBLEException.__init__(self, message)


class NotAuthenticatedException(ConnectCoreBLEException):
    """
    This exception is thrown when the client attempts to communicate before a successful
    authentication process.

    All functionality of this class is the inherited of `Exception
    <https://docs.python.org/2/library/exceptions.html?highlight=exceptions.exception#exceptions.Exception>`_.
    """

    # Constants.
    __DEFAULT_MESSAGE = "Data cannot be encrypted/decrypted, user has not been authenticated"

    def __init__(self, message=__DEFAULT_MESSAGE):
        ConnectCoreBLEException.__init__(self, message)
