var $c51b7e0106f45dea$exports = require("../CalendarDate.cjs");
var $05031860ba2f881f$exports = require("./GregorianCalendar.cjs");


function $parcel$export(e, n, v, s) {
  Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
}

$parcel$export(module.exports, "IndianCalendar", function () { return $9dc8610ad30fbfe5$export$39f31c639fa15726; });
/*
 * Copyright 2020 Adobe. All rights reserved.
 * This file is licensed to you under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License. You may obtain a copy
 * of the License at http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under
 * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
 * OF ANY KIND, either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */ // Portions of the code in this file are based on code from ICU.
// Original licensing can be found in the NOTICE file in the root directory of this source tree.


// Starts in 78 AD,
const $9dc8610ad30fbfe5$var$INDIAN_ERA_START = 78;
// The Indian year starts 80 days later than the Gregorian year.
const $9dc8610ad30fbfe5$var$INDIAN_YEAR_START = 80;
class $9dc8610ad30fbfe5$export$39f31c639fa15726 extends (0, $05031860ba2f881f$exports.GregorianCalendar) {
    fromJulianDay(jd) {
        // Gregorian date for Julian day
        let date = super.fromJulianDay(jd);
        // Year in Saka era
        let indianYear = date.year - $9dc8610ad30fbfe5$var$INDIAN_ERA_START;
        // Day number in Gregorian year (starting from 0)
        let yDay = jd - (0, $05031860ba2f881f$exports.gregorianToJulianDay)(date.era, date.year, 1, 1);
        let leapMonth;
        if (yDay < $9dc8610ad30fbfe5$var$INDIAN_YEAR_START) {
            //  Day is at the end of the preceding Saka year
            indianYear--;
            // Days in leapMonth this year, previous Gregorian year
            leapMonth = (0, $05031860ba2f881f$exports.isLeapYear)(date.year - 1) ? 31 : 30;
            yDay += leapMonth + 155 + 90 + 10;
        } else {
            // Days in leapMonth this year
            leapMonth = (0, $05031860ba2f881f$exports.isLeapYear)(date.year) ? 31 : 30;
            yDay -= $9dc8610ad30fbfe5$var$INDIAN_YEAR_START;
        }
        let indianMonth;
        let indianDay;
        if (yDay < leapMonth) {
            indianMonth = 1;
            indianDay = yDay + 1;
        } else {
            let mDay = yDay - leapMonth;
            if (mDay < 155) {
                indianMonth = Math.floor(mDay / 31) + 2;
                indianDay = mDay % 31 + 1;
            } else {
                mDay -= 155;
                indianMonth = Math.floor(mDay / 30) + 7;
                indianDay = mDay % 30 + 1;
            }
        }
        return new (0, $c51b7e0106f45dea$exports.CalendarDate)(this, indianYear, indianMonth, indianDay);
    }
    toJulianDay(date) {
        let extendedYear = date.year + $9dc8610ad30fbfe5$var$INDIAN_ERA_START;
        let [era, year] = (0, $05031860ba2f881f$exports.fromExtendedYear)(extendedYear);
        let leapMonth;
        let jd;
        if ((0, $05031860ba2f881f$exports.isLeapYear)(year)) {
            leapMonth = 31;
            jd = (0, $05031860ba2f881f$exports.gregorianToJulianDay)(era, year, 3, 21);
        } else {
            leapMonth = 30;
            jd = (0, $05031860ba2f881f$exports.gregorianToJulianDay)(era, year, 3, 22);
        }
        if (date.month === 1) return jd + date.day - 1;
        jd += leapMonth + Math.min(date.month - 2, 5) * 31;
        if (date.month >= 8) jd += (date.month - 7) * 30;
        jd += date.day - 1;
        return jd;
    }
    getDaysInMonth(date) {
        if (date.month === 1 && (0, $05031860ba2f881f$exports.isLeapYear)(date.year + $9dc8610ad30fbfe5$var$INDIAN_ERA_START)) return 31;
        if (date.month >= 2 && date.month <= 6) return 31;
        return 30;
    }
    getYearsInEra() {
        // 9999-12-31 gregorian is 9920-10-10 indian.
        // Round down to 9919 for the last full year.
        return 9919;
    }
    getEras() {
        return [
            'saka'
        ];
    }
    balanceDate() {}
    constructor(...args){
        super(...args), this.identifier = 'indian';
    }
}


//# sourceMappingURL=IndianCalendar.cjs.map
