# -*- coding: utf-8 -*-
"""
Ejemplo 13: Acceso directo de bajo nivel a BASS.

Muestra cómo usar la API nativa de BASS directamente
para usuarios avanzados que necesitan control total.

Uso:
	python 13_bajo_nivel_directo.py
"""

import ctypes
from basskit.dlls.bass import bass
from basskit.constantes.bass import *
from basskit.estructuras.bass import BASS_DEVICEINFO, BASS_INFO
from basskit.tipos import version_a_texto


def main():
	"""Demuestra el uso directo de funciones BASS de bajo nivel."""

	# 1. Obtener versión
	version = bass.BASS_GetVersion()
	print(f"BASS versión: {version_a_texto(version)} (0x{version:08X})")

	# 2. Listar dispositivos
	print("\nDispositivos de salida:")
	info = BASS_DEVICEINFO()
	i = 0
	while bass.BASS_GetDeviceInfo(i, ctypes.byref(info)):
		nombre = info.name.decode("utf-8", errors="replace") if info.name else "?"
		es_defecto = " [DEFECTO]" if info.flags & BASS_DEVICE_DEFAULT else ""
		print(f"  {i}: {nombre}{es_defecto}")
		i += 1

	# 3. Inicializar sin sonido (dispositivo 0)
	resultado = bass.BASS_Init(0, 44100, 0, 0, None)
	if resultado:
		print("\nBASS inicializado (sin sonido)")

		# 4. Obtener info del dispositivo
		dev_info = BASS_INFO()
		if bass.BASS_GetInfo(ctypes.byref(dev_info)):
			print(f"  Frecuencia: {dev_info.freq} Hz")
			print(f"  Altavoces: {dev_info.speakers}")

		# 5. Obtener uso de CPU
		cpu = bass.BASS_GetCPU()
		print(f"  Uso de CPU: {cpu:.2f}%")

		# 6. Liberar
		bass.BASS_Free()
		print("\nBASS liberado correctamente.")
	else:
		codigo = bass.BASS_ErrorGetCode()
		print(f"\nError al inicializar BASS: código {codigo}")

	print("\n¡Acceso de bajo nivel completado!")


if __name__ == "__main__":
	main()
