//! moment.js locale configuration
//! locale : Luxembourgish [lb]
//! author : mweimerskirch : https://github.com/mweimerskirch
//! author : David Raison : https://github.com/kwisatz
import moment from "../moment.js";

function processRelativeTime(number, withoutSuffix, key, isFuture) {
  var format = {
    m: ['eng Minutt', 'enger Minutt'],
    h: ['eng Stonn', 'enger Stonn'],
    d: ['een Dag', 'engem Dag'],
    M: ['ee Mount', 'engem Mount'],
    y: ['ee Joer', 'engem Joer']
  };
  return withoutSuffix ? format[key][0] : format[key][1];
}

function processFutureTime(string) {
  var number = string.substr(0, string.indexOf(' '));

  if (eifelerRegelAppliesToNumber(number)) {
    return 'a ' + string;
  }

  return 'an ' + string;
}

function processPastTime(string) {
  var number = string.substr(0, string.indexOf(' '));

  if (eifelerRegelAppliesToNumber(number)) {
    return 'viru ' + string;
  }

  return 'virun ' + string;
}
/**
 * Returns true if the word before the given number loses the '-n' ending.
 * e.g. 'an 10 Deeg' but 'a 5 Deeg'
 *
 * @param number {integer}
 * @returns {boolean}
 */


function eifelerRegelAppliesToNumber(number) {
  number = parseInt(number, 10);

  if (isNaN(number)) {
    return false;
  }

  if (number < 0) {
    // Negative Number --> always true
    return true;
  } else if (number < 10) {
    // Only 1 digit
    if (4 <= number && number <= 7) {
      return true;
    }

    return false;
  } else if (number < 100) {
    // 2 digits
    var lastDigit = number % 10,
        firstDigit = number / 10;

    if (lastDigit === 0) {
      return eifelerRegelAppliesToNumber(firstDigit);
    }

    return eifelerRegelAppliesToNumber(lastDigit);
  } else if (number < 10000) {
    // 3 or 4 digits --> recursively check first digit
    while (number >= 10) {
      number = number / 10;
    }

    return eifelerRegelAppliesToNumber(number);
  } else {
    // Anything larger than 4 digits: recursively check first n-3 digits
    number = number / 1000;
    return eifelerRegelAppliesToNumber(number);
  }
}

export default moment.defineLocale('lb', {
  months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
  monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
  monthsParseExact: true,
  weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),
  weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
  weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
  weekdaysParseExact: true,
  longDateFormat: {
    LT: 'H:mm [Auer]',
    LTS: 'H:mm:ss [Auer]',
    L: 'DD.MM.YYYY',
    LL: 'D. MMMM YYYY',
    LLL: 'D. MMMM YYYY H:mm [Auer]',
    LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'
  },
  calendar: {
    sameDay: '[Haut um] LT',
    sameElse: 'L',
    nextDay: '[Muer um] LT',
    nextWeek: 'dddd [um] LT',
    lastDay: '[Gëschter um] LT',
    lastWeek: function () {
      // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
      switch (this.day()) {
        case 2:
        case 4:
          return '[Leschten] dddd [um] LT';

        default:
          return '[Leschte] dddd [um] LT';
      }
    }
  },
  relativeTime: {
    future: processFutureTime,
    past: processPastTime,
    s: 'e puer Sekonnen',
    ss: '%d Sekonnen',
    m: processRelativeTime,
    mm: '%d Minutten',
    h: processRelativeTime,
    hh: '%d Stonnen',
    d: processRelativeTime,
    dd: '%d Deeg',
    M: processRelativeTime,
    MM: '%d Méint',
    y: processRelativeTime,
    yy: '%d Joer'
  },
  dayOfMonthOrdinalParse: /\d{1,2}\./,
  ordinal: '%d.',
  week: {
    dow: 1,
    // Monday is the first day of the week.
    doy: 4 // The week that contains Jan 4th is the first week of the year.

  }
});