import moment = require("moment");

export = moment;

declare module "moment" {
    type IUnitOfTime = "iYear" | "iMonth" | "iDate";

    function iDaysInMonth(year: number, month: number): number;

    namespace iConvert {
        interface GregorianResult {
            gy: number;
            gm: number;
            gd: number;
        }

        interface HijriResult {
            hy: number;
            hm: number;
            hd: number;
        }

        function toHijri(gy: number, gm: number, gd: number): HijriResult;
        function toGregorian(hy: number, hm: number, hd: number): GregorianResult;
    }

    interface Moment {
        startOf(unit: IUnitOfTime): Moment;
        endOf(unit: IUnitOfTime): Moment;

        add(amount: string | number, unit: IUnitOfTime): Moment;
        subtract(amount: string | number, unit: IUnitOfTime): Moment;

        iYear(y: number): Moment;
        iYear(): number;
        iMonth(m: number | string): Moment;
        iMonth(): number;
        iDate(d: number): Moment;
        iDate(): number;
        iWeek(d: number): Moment;
        iWeek(): number;
        iWeekYear(d: number): Moment;
        iWeekYear(): number;
        iDayOfYear(d: number): Moment;
        iDayOfYear(): number;
        iDaysInMonth(): number;
    }
}
