// playfield.hpp - Configuració del fons del playfield (graella, sub-graella, animació)
// © 2026 JailDesigner

#pragma once

#include <SDL3/SDL.h>

namespace Defaults::Playfield {

    // Estructura de la graella (cel·les omplen tota la PLAYAREA)
    constexpr int COLUMNS = 16;      // cell_w = PLAYAREA.w / 16
    constexpr int ROWS = 8;          // cell_h = PLAYAREA.h / 8
    constexpr int SUBDIVISIONS = 4;  // cada cel·la principal es divideix en N subcel·les

    // Brillo respecte al color global (border = 1.0)
    constexpr float GRID_BRIGHTNESS = 0.20F;
    constexpr float SUBGRID_BRIGHTNESS = 0.10F;

    // Color de la rejilla (lila/violeta synthwave). Es modula amb brillantor.
    constexpr SDL_Color GRID_COLOR = {.r = 160, .g = 80, .b = 255, .a = 255};

    // Animació de creació amb timer intern del Playfield.
    // L'animació total cobreix tot l'INIT_HUD (3 s). Cada línia es pinta en
    // LINE_GROWTH_DURATION_S; els spawns es distribueixen amb sweep des del
    // centre perquè verticals i horitzontals propaguen cap als extrems.
    constexpr float LINE_GROWTH_DURATION_S = 0.4F;
    constexpr float TOTAL_ANIMATION_DURATION_S = 3.0F;  // = Defaults::Game::INIT_HUD_DURATION

    // Cap brillant de la línia mentre creix (extrem que avança).
    constexpr float HEAD_LENGTH_PX = 8.0F;   // longitud en píxels lògics del tram brillant
    constexpr float HEAD_BRIGHTNESS = 0.0F;  // brillo del cap (= border)

    // Ripples: deformacions circulars que travessen la graella com ones d'aigua.
    // Cada ripple desplaça radialment cap a fora els vèrtexs de les línies que
    // travessa, amb una envoltant que decau a les vores de l'anell i amb el temps.
    namespace Ripple {
        constexpr int POOL_SIZE = 32;

        // Ones grans (explosions / fireworks).
        constexpr float BIG_AMPLITUDE_PX = 10.0F;
        constexpr float BIG_SPEED_PX_S = 320.0F;
        constexpr float BIG_LIFETIME_S = 1.4F;
        constexpr float BIG_THICKNESS_PX = 40.0F;

        // Ones petites (pas de nau, cadència estil trail).
        constexpr float SMALL_AMPLITUDE_PX = 2.5F;
        constexpr float SMALL_SPEED_PX_S = 160.0F;
        constexpr float SMALL_LIFETIME_S = 0.55F;
        constexpr float SMALL_THICKNESS_PX = 18.0F;

        // Cadència "soltar gotetes" per nau (patró TrailManager).
        constexpr float SHIP_COOLDOWN_S = 0.10F;
        constexpr float SHIP_COOLDOWN_JITTER_S = 0.03F;
        constexpr float SHIP_SPEED_THRESHOLD_PX_S = 80.0F;

        // Subdivisió de línies quan estan dins una ripple.
        constexpr int MAIN_SEGMENTS = 24;  // línies principals
        constexpr int SUB_SEGMENTS = 12;   // sub-graella
    }  // namespace Ripple

}  // namespace Defaults::Playfield
