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

#ifndef LS_STD_DATE_PARAMETER_HPP
#define LS_STD_DATE_PARAMETER_HPP

#include <cstdint>
#include <ls-std/os/dynamic-goal.hpp>
#include <ls-std/time/type/DateParameterTypes.hpp>

/*
 * @doc: class(name: 'DateParameter', package: 'time')
 * @doc: time.DateParameter.description('This class holds information of a date processed by this library.')
 * */

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

      DateParameter(ls::standard::time::type::Year _year, ls::standard::time::type::Month _month, ls::standard::time::type::Day _day, ls::standard::time::type::Hour _hour, ls::standard::time::type::Minute _minute, ls::standard::time::type::Second _second);
      DateParameter();
      ~DateParameter();

      bool operator==(const ls::standard::time::DateParameter &_dateParameter) const;

      [[nodiscard]] ls::standard::time::type::Day getDay() const;
      [[nodiscard]] ls::standard::time::type::Hour getHour() const;
      [[nodiscard]] ls::standard::time::type::Minute getMinute() const;
      [[nodiscard]] ls::standard::time::type::Month getMonth() const;
      [[nodiscard]] ls::standard::time::type::Second getSecond() const;
      [[nodiscard]] ls::standard::time::type::Year getYear() const;
      void setDay(ls::standard::time::type::Day _day);
      void setHour(ls::standard::time::type::Hour _hour);
      void setMinute(ls::standard::time::type::Minute _minute);
      void setMonth(ls::standard::time::type::Month _month);
      void setSecond(ls::standard::time::type::Second _second);
      void setYear(ls::standard::time::type::Year _year);

    private:

      ls::standard::time::type::Day day{};
      ls::standard::time::type::Hour hour{};
      ls::standard::time::type::Minute minute{};
      ls::standard::time::type::Month month{};
      ls::standard::time::type::Second second{};
      ls::standard::time::type::Year year{};
  };
}

#endif
