// 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 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),
}
