# -*- coding: utf-8 -*-
"""
Tests de carga de DLL y funciones básicas de BASS.
"""

import platform
import struct
import pytest


# Saltar todos los tests si no estamos en Windows 64 bits
pytestmark = pytest.mark.skipif(
	platform.system() != "Windows" or struct.calcsize("P") * 8 != 64,
	reason="basskit solo funciona en Windows 64 bits",
)


def test_cargar_bass_dll():
	"""Verifica que bass.dll se puede cargar."""
	from basskit.cargador import cargar_bass
	dll = cargar_bass()
	assert dll is not None


def test_bass_get_version():
	"""Verifica que BASS_GetVersion responde correctamente."""
	from basskit.dlls.bass import bass
	version = bass.BASS_GetVersion()
	assert version > 0
	# La versión debe ser 2.4.x.x
	mayor = (version >> 24) & 0xFF
	menor = (version >> 16) & 0xFF
	assert mayor == 2
	assert menor == 4


def test_dlls_opcionales():
	"""Verifica que los add-ons opcionales se pueden cargar o reportan error claro."""
	from basskit.cargador import cargar_addon, ADDONS_CONOCIDOS
	from basskit.cargador import cargar_bass

	# Asegurar bass cargada primero
	cargar_bass()

	cargados = 0
	no_encontrados = 0

	for nombre in ADDONS_CONOCIDOS:
		dll = cargar_addon(nombre)
		if dll is not None:
			cargados += 1
		else:
			no_encontrados += 1

	# Al menos bass_fx debería estar disponible
	assert cargados > 0, "Ningún add-on se pudo cargar"


def test_diagnostico_con_dlls():
	"""Verifica el diagnóstico con DLLs cargadas."""
	import basskit
	info = basskit.diagnostico()
	assert info["estado"] in ("correcto", "parcial")
	assert info["version_bass"] is not None
	assert "bass.dll" in info["dlls_cargables"]


def test_bass_error_get_code():
	"""Verifica que BASS_ErrorGetCode funciona."""
	from basskit.dlls.bass import bass
	# Sin llamada previa, debería retornar BASS_OK o un código válido
	codigo = bass.BASS_ErrorGetCode()
	assert isinstance(codigo, int)
