#pragma once

#include <SDL3/SDL.h>

#include "core/rendering/screen.hpp"  // Para Screen::Filter
#include "utils/defines.hpp"          // Para GameCanvas
#include "utils/utils.hpp"            // Para PaletteColor

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

namespace Defaults {

// --- CANVAS ---
// Dimensiones del canvas del juego (usa GameCanvas como fuente única)
namespace Canvas {
constexpr int WIDTH = GameCanvas::WIDTH;    // Ancho del canvas del juego (256)
constexpr int HEIGHT = GameCanvas::HEIGHT;  // Alto del canvas del juego (192)
}  // namespace Canvas

// --- WINDOW ---
namespace Window {
constexpr int ZOOM = 2;  // Zoom de la ventana por defecto
}  // namespace Window

// --- VIDEO ---
namespace Video {
constexpr bool FULLSCREEN = false;                          // Modo de pantalla completa por defecto (false = ventana)
constexpr Screen::Filter FILTER = Screen::Filter::NEAREST;  // Filtro por defecto
constexpr bool VERTICAL_SYNC = true;                        // Vsync activado por defecto
constexpr bool SHADERS = false;                             // Shaders desactivados por defecto
constexpr bool INTEGER_SCALE = true;                        // Escalado entero activado por defecto
constexpr bool KEEP_ASPECT = true;                          // Mantener aspecto activado por defecto
constexpr const char* PALETTE_NAME = "zx-spectrum";         // Paleta por defecto
}  // namespace Video

// --- BORDER ---
namespace Border {
constexpr bool ENABLED = true;  // Borde activado por defecto
constexpr int WIDTH = 32;       // Ancho del borde por defecto
constexpr int HEIGHT = 24;      // Alto del borde por defecto
}  // namespace Border

// --- AUDIO ---
namespace Audio {
constexpr float VOLUME = 1.0F;  // Volumen por defecto
constexpr bool ENABLED = true;  // Audio por defecto
}  // namespace Audio

// --- MUSIC ---
namespace Music {
constexpr float VOLUME = 0.8F;  // Volumen por defecto de la musica
constexpr bool ENABLED = true;  // Musica habilitada por defecto
}  // namespace Music

// --- SOUND ---
namespace Sound {
constexpr float VOLUME = 1.0F;  // Volumen por defecto de los efectos de sonido
constexpr bool ENABLED = true;  // Sonido habilitado por defecto
}  // namespace Sound

// --- CHEATS ---
namespace Cheat {
constexpr bool INFINITE_LIVES = false;  // Vidas infinitas desactivadas por defecto
constexpr bool INVINCIBLE = true;       // Invencibilidad desactivada por defecto
constexpr bool JAIL_IS_OPEN = false;    // Jail abierta desactivada por defecto
constexpr bool ALTERNATE_SKIN = false;  // Skin alternativa desactivada por defecto
}  // namespace Cheat

// --- STATS ---
namespace Stats {
constexpr int ROOMS = 0;                     // Habitaciones visitadas por defecto
constexpr int ITEMS = 0;                     // Items obtenidos por defecto
constexpr const char* WORST_NIGHTMARE = "";  // Habitación con más muertes por defecto
}  // namespace Stats

// --- CONTROLS ---
namespace Controls {
constexpr SDL_Scancode KEY_LEFT = SDL_SCANCODE_LEFT;    // Tecla izquierda por defecto
constexpr SDL_Scancode KEY_RIGHT = SDL_SCANCODE_RIGHT;  // Tecla derecha por defecto
constexpr SDL_Scancode KEY_JUMP = SDL_SCANCODE_UP;      // Tecla salto por defecto

constexpr int GAMEPAD_BUTTON_LEFT = SDL_GAMEPAD_BUTTON_DPAD_LEFT;    // Botón izquierda por defecto
constexpr int GAMEPAD_BUTTON_RIGHT = SDL_GAMEPAD_BUTTON_DPAD_RIGHT;  // Botón derecha por defecto
constexpr int GAMEPAD_BUTTON_JUMP = SDL_GAMEPAD_BUTTON_WEST;         // Botón salto por defecto
}  // namespace Controls

}  // namespace Defaults
