// Copyright 2023 Google LLC
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

use thiserror::Error;

use bt_common::packet_encoding::Error as PacketError;
use bt_gatt::types::{Error as BTGattError, Handle};

#[derive(Debug, Error)]
pub enum Error {
    #[error(
        "An unsupported opcode ({0:#x}) used in a Broadcast Audio Scan Control Point operation"
    )]
    OpCodeNotSupported(u8),

    #[error("Invalid source id ({0:#x}) used in a Broadcast Audio Scan Control Point operation")]
    InvalidSourceId(u8),

    #[error("Packet serialization/deserialization error: {0}")]
    Packet(PacketError),

    #[error("Malformed service on peer: {0}")]
    Service(ServiceError),

    #[error("GATT operation error: {0}")]
    Gatt(BTGattError),

    #[error("Failure occurred: {0}")]
    Generic(String),
}

/// This error represents an error we found at the remote BASS service or
/// we encountered during the interaction with the remote service which
/// prevents us from proceeding further with the client operation.
#[derive(Debug, Error, PartialEq)]
pub enum ServiceError {
    #[error("Missing a required service characteristic")]
    MissingCharacteristic,

    #[error("More than one Broadcast Audio Scan Control Point characteristics")]
    ExtraScanControlPointCharacteristic,

    #[error("Failed to configure notification for Broadcast Recieve State characteristic (handle={0:?})")]
    NotificationConfig(Handle),

    #[error("Broadcast Receive State notification channels closed unexpectedly: {0}")]
    NotificationChannelClosed(String),
}
