import Ember from 'ember';
import RSVP from 'rsvp';
import Service, {inject as service} from '@ember/service';
import timezoneData from '@tryghost/timezone-data';
import {computed} from '@ember/object';

// ember-cli-shims doesn't export _ProxyMixin
const {_ProxyMixin} = Ember;

export default Service.extend(_ProxyMixin, {
    ajax: service(),
    ghostPaths: service(),
    session: service(),

    content: null,

    init() {
        this._super(...arguments);
        this.content = {};
    },

    fetch() {
        let promises = [];

        promises.push(this.fetchUnauthenticated());

        if (this.session.isAuthenticated) {
            promises.push(this.fetchAuthenticated());
        }

        return RSVP.all(promises);
    },

    fetchUnauthenticated() {
        let siteUrl = this.ghostPaths.url.api('site');
        return this.ajax.request(siteUrl).then(({site}) => {
            // normalize url to non-trailing-slash
            site.blogUrl = site.url.replace(/\/$/, '');
            site.blogTitle = site.title;
            delete site.url;
            delete site.title;

            Object.assign(this.content, site);
        }).then(() => {
            this.notifyPropertyChange('content');
        });
    },

    fetchAuthenticated() {
        let configUrl = this.ghostPaths.url.api('config');
        return this.ajax.request(configUrl).then(({config}) => {
            Object.assign(this.content, config);
        }).then(() => {
            this.notifyPropertyChange('content');
        });
    },

    availableTimezones: computed(function () {
        return RSVP.resolve(timezoneData);
    }),

    blogDomain: computed('blogUrl', function () {
        let blogUrl = this.get('blogUrl');
        let blogDomain = blogUrl
            .replace(/^https?:\/\//, '')
            .replace(/\/?$/, '');

        return blogDomain;
    })
});
