// relaunch.hpp - Reinici en calent del proces (execv)
// © 2026 JailDesigner
//
// Helper desacoblat per a permetre que el menu de servei demani un reinici
// sense conèixer Director ni main.cpp. Patro:
//
//   main()       → Relaunch::setArgv(argc, argv)      (a l'arrencada)
//   ServiceMenu  → Relaunch::request()                 (en activar REINICIAR)
//   main()       → Relaunch::execIfRequested()         (a SDL_AppQuit)
//
// L'execv() reemplaca el proces actual: si torna, ha fallat. A EMSCRIPTEN
// no es pot reiniciar; isRequested() seguira dient true pero execIfRequested
// sera no-op.

#pragma once

namespace System::Relaunch {

    // Emmagatzema l'argv original. Cal cridar-ho una vegada des de main.
    void setArgv(int argc, char** argv);

    // Demana un reinici (no actua immediatament; nomes marca el flag).
    void request();

    // Consulta del flag.
    [[nodiscard]] auto isRequested() -> bool;

    // Si hi ha reinici demanat i tenim argv valid, fa execv. En cas d'exit
    // no torna. Si execv falla, registra l'error i torna; el caller hauria
    // de sortir normalment.
    void execIfRequested();

}  // namespace System::Relaunch
