import {DateUnit} from "./dateunit";
import {Row} from "./elements";

export interface CalendarBase {
    weekDayNames: string[];
    monthNames: string[];
    weekFirstDay: number;
    getMonthLength(date: DateUnit): number;
    weekHeaders(): Row;
    dayNumberOfMonthFirst(date: DateUnit): number;
    dateToDateUnit(date: Date): DateUnit;
    dateToString(date: Date, format: string): string;
    dateUnitToDate(date: DateUnit): Date;
    getNameOfMonth(num: number): string;
}

export class Calendar<T extends CalendarBase> {
    calendar: T;

    constructor(TCreator: {new (): T;}) {
        this.calendar = new TCreator();
    }

    nameOfMonth(num: number): string {
        return this.calendar.getNameOfMonth(num);
    }

    dateToString(date: Date, format: string): string {
        return this.calendar.dateToString(date, format);
    }

    monthLength(date: DateUnit) {
        return this.calendar.getMonthLength(date);
    }

    weekHeaders() {
        return this.calendar.weekHeaders();
    }

    dayNumberofMonthFirst(date: DateUnit): number {
        return this.calendar.dayNumberOfMonthFirst(date);
    }

}