import { Inject, Injectable } from '@angular/core';
import { AppSettings, FlightModel, getFirstFlight, getFirstLeg } from '@app/shared/models-legacy';
import { APP_SETTINGS } from '@app/shared/services';
import { airlines } from '@shared/airlines';
import * as moment from 'moment';

const airlinesWithStatus = new Set(airlines.filter((a) => a.canViewStatus).map((a) => a.code));
@Injectable({ providedIn: 'root' })
export class FlightStatusLogic {
    constructor(@Inject(APP_SETTINGS) public settings: AppSettings) {}
    available(flight: FlightModel) {
        if (!flight) return false;

        const leg = getFirstLeg(flight);
        flight = getFirstFlight(flight);

        // 1. only for SU
        const airline = (flight.operatingBy || leg.operatingBy)?.scheduled;
        if (!airlinesWithStatus.has(airline)) {
            // console.log(`Кнопка "Стату рейса" недоступна для рейса ${flight.hash} потому, что компания не та`);
            return false;
        }

        const departure = leg.departure.times.scheduled.local;
        const flightDate = flight.dateToSearchBy;
        // 2. only today
        const now = moment(); // 25 Nov 2021 22:00 (17 hours in advance, should be fine)
        if (!now.isSame(moment(flightDate), 'day')) {
            // console.log(
            //     `Кнопка "Стату рейса" недоступна для рейса ${
            //         flight.hash
            //     } потому, что другой день (Отправление: ${departure} (лок. время аэропорта), дата рейса: ${flightDate} (тоже локальное аэропорта), сейчас: ${now.toDate()} (время пользователя))`,
            // );
            return false;
        }

        // 3. only 24h ahead
        // 24hours
        const from = this.settings.flightStatusAvailableFrom;

        // 25 Nov 2021 15:00                    // 26 Nov 2021 15:00
        const availableFrom = moment(departure).add(-from, 'hour');
        if (now > availableFrom) return true; // now already passed

        // console.log(
        //     `Кнопка "Стату рейса" недоступна для рейса ${
        //         flight.hash
        //     } потому, что еще вермя не пришло. сейсас - ${now.toDate()}, будет доступно с ${availableFrom.toDate()} (за ${
        //         this.settings.flightStatusAvailableFrom
        //     }ч)`,
        // );
        return false;
    }
}
