/*
* Author:          Patrick-Christopher Mattulat
* Co-Author:       Claude Sonnet 4.6 (LLM)
* Company:         Lynar Studios
* E-Mail:          webmaster@lynarstudios.com
* Created:         2023-03-31
* Changed:         2026-06-23
*
* */

#ifndef LS_STD_DATE_PARAMETER_MAPPER_HPP
#define LS_STD_DATE_PARAMETER_MAPPER_HPP

#include "DateParameter.hpp"
#include <ls-std/os/dynamic-goal.hpp>
#include <ls-std/time/type/DateParameterTypes.hpp>
#ifdef _WIN32
  #define NOMINMAX
  #include <windows.h>
#endif

/*
 * @doc: class(name: 'DateParameterMapper', package: 'time')
 * @doc: time.DateParameterMapper.description('This class maps date information to either an internal POSIX clock or an internal Windows clock, which can then be processed for setting the system time.')
 * */

namespace ls::standard::time
{
  class LS_STD_DYNAMIC_GOAL DateParameterMapper
  {
    public:

      DateParameterMapper();
      ~DateParameterMapper();

#if defined(unix) || defined(__APPLE__)
      [[nodiscard]] static ls::standard::time::type::UnixTimestamp toUnixTimestamp(const ls::standard::time::DateParameter &_dateParameter);
#endif
#ifdef _WIN32
      [[nodiscard]] static SYSTEMTIME toWindowsSystemTime(const ls::standard::time::DateParameter &_dateParameter);
#endif
  };
}

#endif
