import { SubscriptionStatus } from "../modules/company/entities/company-subscription.entity"

/**
 * Determines the subscription status based on start and end dates
 * @param startDate - Subscription start date
 * @param endDate - Subscription end date
 * @returns SubscriptionStatus enum value
 */
export const determineSubscriptionStatus = (
  startDate: Date,
  endDate: Date,
): SubscriptionStatus => {
  const today = new Date()
  today.setHours(0, 0, 0, 0) // Reset time to start of day for accurate comparison

  const start = new Date(startDate)
  start.setHours(0, 0, 0, 0)

  const end = new Date(endDate)
  end.setHours(0, 0, 0, 0)

  if (today < start) {
    return SubscriptionStatus.UPCOMING
  } else if (today >= start && today <= end) {
    return SubscriptionStatus.ACTIVE
  } else {
    return SubscriptionStatus.EXPIRED
  }
}

/**
 * Checks if subscription data has changed
 * @param current - Current subscription data
 * @param updated - Updated subscription data
 * @returns boolean indicating if subscription data changed
 */
export const hasSubscriptionDataChanged = (
  current: {
    subscription_start_date: Date
    duration: number
    duration_type: string
    subscription_amount: number
  },
  updated: any,
): boolean => {
  const startDateChanged =
    updated.subscription_start_date &&
    new Date(current.subscription_start_date).getTime() !==
      new Date(updated.subscription_start_date).getTime()

  const durationChanged =
    updated.subscription_duration !== undefined &&
    current.duration !== updated.subscription_duration

  const durationTypeChanged =
    updated.subscription_duration_type !== undefined &&
    current.duration_type !== updated.subscription_duration_type

  const amountChanged =
    updated.subscription_amount !== undefined &&
    Number(current.subscription_amount) !== Number(updated.subscription_amount)

  return !!(
    startDateChanged ||
    durationChanged ||
    durationTypeChanged ||
    amountChanged
  )
}
