import { isMoment } from "./constructor.js";
import { normalizeUnits } from "../units/aliases.js";
import { createLocal } from "../create/local.js";
export function isAfter(input, units) {
  var localInput = isMoment(input) ? input : createLocal(input);

  if (!(this.isValid() && localInput.isValid())) {
    return false;
  }

  units = normalizeUnits(units) || 'millisecond';

  if (units === 'millisecond') {
    return this.valueOf() > localInput.valueOf();
  } else {
    return localInput.valueOf() < this.clone().startOf(units).valueOf();
  }
}
export function isBefore(input, units) {
  var localInput = isMoment(input) ? input : createLocal(input);

  if (!(this.isValid() && localInput.isValid())) {
    return false;
  }

  units = normalizeUnits(units) || 'millisecond';

  if (units === 'millisecond') {
    return this.valueOf() < localInput.valueOf();
  } else {
    return this.clone().endOf(units).valueOf() < localInput.valueOf();
  }
}
export function isBetween(from, to, units, inclusivity) {
  var localFrom = isMoment(from) ? from : createLocal(from),
      localTo = isMoment(to) ? to : createLocal(to);

  if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
    return false;
  }

  inclusivity = inclusivity || '()';
  return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));
}
export function isSame(input, units) {
  var localInput = isMoment(input) ? input : createLocal(input),
      inputMs;

  if (!(this.isValid() && localInput.isValid())) {
    return false;
  }

  units = normalizeUnits(units) || 'millisecond';

  if (units === 'millisecond') {
    return this.valueOf() === localInput.valueOf();
  } else {
    inputMs = localInput.valueOf();
    return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
  }
}
export function isSameOrAfter(input, units) {
  return this.isSame(input, units) || this.isAfter(input, units);
}
export function isSameOrBefore(input, units) {
  return this.isSame(input, units) || this.isBefore(input, units);
}