package com.airlock.iam.base.misc.date;

import jakarta.annotation.Nullable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;

public final class LocalDateHelper {
   private LocalDateHelper() {
   }

   public static Date toDate(LocalDateTime localDateTime) {
      return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
   }

   public static LocalDateTime toLocalDateTime(Date date) {
      return toLocalDateTime(date, ZoneId.systemDefault());
   }

   public static LocalDateTime toLocalDateTime(Date date, ZoneId timezone) {
      return date.toInstant().atZone(timezone).toLocalDateTime();
   }

   public static Date toDate(@Nullable LocalDate localDate) {
      return localDate == null ? null : Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
   }

   public static LocalDate toLocalDate(@Nullable Date date) {
      if (date == null) {
         return null;
      } else {
         return date instanceof java.sql.Date ? ((java.sql.Date)date).toLocalDate() : date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
      }
   }
}
