#pragma once

#include <SDL3/SDL.h>

#include "core/rendering/screen.hpp"  // Para ScreenFilter
#include "utils/utils.hpp"            // Para PaletteColor

// Forward declarations from Options namespace
namespace Options {
enum class ControlScheme;
enum class NotificationPosition;
}  // namespace Options

namespace GameDefaults {

// =============================================================================
// GAME
// =============================================================================
constexpr int GAME_WIDTH = 256;   // Ancho de la ventana por defecto
constexpr int GAME_HEIGHT = 192;  // Alto de la ventana por defecto

// =============================================================================
// WINDOW
// =============================================================================
constexpr int WINDOW_ZOOM = 2;  // Zoom de la ventana por defecto

// =============================================================================
// VIDEO
// =============================================================================
constexpr bool VIDEO_MODE = false;                           // Modo de pantalla completa por defecto (false = ventana)
constexpr ScreenFilter VIDEO_FILTER = ScreenFilter::NEAREST;  // Filtro por defecto
constexpr bool VIDEO_VERTICAL_SYNC = true;                   // Vsync activado por defecto
constexpr bool VIDEO_SHADERS = false;                        // Shaders desactivados por defecto
constexpr bool VIDEO_INTEGER_SCALE = true;                   // Escalado entero activado por defecto
constexpr bool VIDEO_KEEP_ASPECT = true;                     // Mantener aspecto activado por defecto
constexpr const char* PALETTE_NAME = "zx-spectrum";          // Paleta por defecto

// =============================================================================
// BORDER
// =============================================================================
constexpr bool BORDER_ENABLED = true;  // Borde activado por defecto
constexpr int BORDER_WIDTH = 32;       // Ancho del borde por defecto
constexpr int BORDER_HEIGHT = 24;      // Alto del borde por defecto

// =============================================================================
// AUDIO
// =============================================================================
constexpr int AUDIO_VOLUME = 100;    // Volumen por defecto
constexpr bool AUDIO_ENABLED = true;  // Audio por defecto

// MUSIC
constexpr int MUSIC_VOLUME = 80;      // Volumen por defecto de la musica
constexpr bool MUSIC_ENABLED = true;  // Musica habilitada por defecto

// SOUND
constexpr int SOUND_VOLUME = 100;     // Volumen por defecto de los efectos de sonido
constexpr bool SOUND_ENABLED = true;  // Sonido habilitado por defecto

// =============================================================================
// NOTIFICATIONS
// =============================================================================
constexpr bool NOTIFICATION_SOUND = true;                                                                   // Sonido de las notificaciones por defecto
const Uint8 NOTIFICATION_COLOR = static_cast<Uint8>(PaletteColor::BLUE);                                    // Color de las notificaciones por defecto

// =============================================================================
// CONTROL
// =============================================================================
constexpr Options::ControlScheme CONTROL_SCHEME = Options::ControlScheme::CURSOR;  // Control por defecto

// =============================================================================
// OTHER
// =============================================================================
constexpr bool CONSOLE = false;              // Consola desactivada por defecto
constexpr const char* VERSION = "1.10";      // Versión por defecto

}  // namespace GameDefaults
