import { BaseInputComponent } from 'first-npm-package-nicule/forms';
import { ControlContainer, NgForm } from '@angular/forms';
import { Component, Inject, Injectable, Optional, ViewChild } from '@angular/core';
import { DateAdapter, MAT_DATE_FORMATS, NativeDateAdapter } from '@angular/material/core';
import { MatDatepicker } from '@angular/material/datepicker';
import { Observable } from 'rxjs';

@Injectable()
export class MyDateAdapter extends NativeDateAdapter {
    getFirstDayOfWeek(): number { return 1; }
}

@Component({
    templateUrl: 'date-field.component.html',
    styleUrls: ['../mat-field.scss', 'date-field.component.scss'],
    viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]
})
export class DateFieldComponent extends BaseInputComponent {

    @ViewChild('picker', { static: false }) picker: MatDatepicker<any>;

    public dateLabel: Observable<string>;
    public dateValue;

    onSettingsChanged(): void {
        this.dateValue = this.getDateAsObject(this.field.value);
    }

    getDateAsObject(data): any {
        let result = data;

        if (typeof data === 'string' && data) {
            result = new Date(data);
        } else if (!data) {
            result = null;
        }

        return result;
    }

    setDateValue(date: Date): void {
        if (date) {

            if (!(date instanceof Date)) {
                date = this.getDateAsObject(date);
            }

            this.dateValue = new Date(date.getTime() - date.getTimezoneOffset() * 60000);

            return;
        }

        this.dateValue = undefined;
    }
}
