// Copyright 2026 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

use thiserror::Error;

use crate::types::SourceId;
use bt_common::packet_encoding::Error as PacketError;
use bt_gatt::types::Error as BTGattError;

/// Errors encountered when operating a BASS GATT server.
#[derive(Debug, Error)]
pub enum Error {
    #[error("Service is already published")]
    AlreadyPublished,

    #[error("Service should support at least one Broadcast Receive State characteristic")]
    MissingReceiveState,

    #[error("Exceeded maximum number of Broadcast Receive State characteristics (255)")]
    ExceedsMaxReceiveStates,

    #[error("An unsupported opcode ({0:#x}) used in Control Point operation")]
    OpCodeNotSupported(u8),

    #[error("Invalid source id: {0}")]
    InvalidSourceId(SourceId),

    #[error("All Broadcast Receive State characteristic slots are occupied")]
    ServerFull,

    #[error("Packet encoding/decoding error: {0}")]
    Packet(#[from] PacketError),

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