import Helper from '@ember/component/helper';
import moment from 'moment';
import {assert} from '@ember/debug';
import {inject as service} from '@ember/service';

export default Helper.extend({
    settings: service(),

    compute([timeago], {draft, scheduled, published}) {
        assert(timeago, 'You must pass a time to the gh-format-post-time helper');

        if (draft) {
            // No special handling for drafts, just use moment.from
            return moment(timeago).from(moment.utc());
        }

        let timezone = this.get('settings.activeTimezone');
        let time = moment.tz(timeago, timezone);
        let now = moment.tz(moment.utc(), timezone);

        // If not a draft and post was published <= 15 minutes ago
        // or scheduled to be published <= 15 minutes from now, use moment.from
        if (Math.abs(now.diff(time, 'minutes')) <= 15) {
            return time.from(now);
        }

        // If scheduled for or published on the same day, render the time + Today
        if (time.isSame(now, 'day')) {
            let formatted = time.format('HH:mm [Today]');
            return scheduled ? `at ${formatted}` : formatted;
        }

        // if published yesterday, render time + yesterday
        // This check comes before scheduled, because there are likely to be more published
        // posts than scheduled posts.
        if (published && time.isSame(now.clone().subtract(1, 'days').startOf('day'), 'day')) {
            return time.format('HH:mm [Yesterday]');
        }

        // if scheduled for tomorrow, render the time + Tomorrow
        if (scheduled && time.isSame(now.clone().add(1, 'days').startOf('day'), 'day')) {
            return time.format('[at] HH:mm [Tomorrow]');
        }

        // Else, render just the date if published, or the time & date if scheduled
        let format = scheduled ? '[at] HH:mm [on] DD MMM YYYY' : 'DD MMM YYYY';
        return time.format(format);
    }
});
