import {CalendarDate as $9a4e222e1bd2b190$export$99faa760c7908e4f} from "../CalendarDate.js";
import {fromExtendedYear as $f25df78da1f6b40f$export$4475b7e617eb123c, GregorianCalendar as $f25df78da1f6b40f$export$80ee6245ec4f29ec, gregorianToJulianDay as $f25df78da1f6b40f$export$f297eb839006d339, isLeapYear as $f25df78da1f6b40f$export$553d7fa8e3805fc0} from "./GregorianCalendar.js";

/*
 * 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 $a07127433beb6bf1$var$INDIAN_ERA_START = 78;
// The Indian year starts 80 days later than the Gregorian year.
const $a07127433beb6bf1$var$INDIAN_YEAR_START = 80;
class $a07127433beb6bf1$export$39f31c639fa15726 extends (0, $f25df78da1f6b40f$export$80ee6245ec4f29ec) {
    fromJulianDay(jd) {
        // Gregorian date for Julian day
        let date = super.fromJulianDay(jd);
        // Year in Saka era
        let indianYear = date.year - $a07127433beb6bf1$var$INDIAN_ERA_START;
        // Day number in Gregorian year (starting from 0)
        let yDay = jd - (0, $f25df78da1f6b40f$export$f297eb839006d339)(date.era, date.year, 1, 1);
        let leapMonth;
        if (yDay < $a07127433beb6bf1$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, $f25df78da1f6b40f$export$553d7fa8e3805fc0)(date.year - 1) ? 31 : 30;
            yDay += leapMonth + 155 + 90 + 10;
        } else {
            // Days in leapMonth this year
            leapMonth = (0, $f25df78da1f6b40f$export$553d7fa8e3805fc0)(date.year) ? 31 : 30;
            yDay -= $a07127433beb6bf1$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, $9a4e222e1bd2b190$export$99faa760c7908e4f)(this, indianYear, indianMonth, indianDay);
    }
    toJulianDay(date) {
        let extendedYear = date.year + $a07127433beb6bf1$var$INDIAN_ERA_START;
        let [era, year] = (0, $f25df78da1f6b40f$export$4475b7e617eb123c)(extendedYear);
        let leapMonth;
        let jd;
        if ((0, $f25df78da1f6b40f$export$553d7fa8e3805fc0)(year)) {
            leapMonth = 31;
            jd = (0, $f25df78da1f6b40f$export$f297eb839006d339)(era, year, 3, 21);
        } else {
            leapMonth = 30;
            jd = (0, $f25df78da1f6b40f$export$f297eb839006d339)(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, $f25df78da1f6b40f$export$553d7fa8e3805fc0)(date.year + $a07127433beb6bf1$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';
    }
}


export {$a07127433beb6bf1$export$39f31c639fa15726 as IndianCalendar};
//# sourceMappingURL=IndianCalendar.js.map
