const m = require('mithril')
const Article = require('./article')
const api = require('./api')
const media = require('./media')
const NotFoundView = require('./site_404')

window.LoadComments = false
window.HyvorLoaded = false
window.HYVOR_TALK_WEBSITE = 7544

const SiteArticle = {
  oninit: function(vnode) {
    this.error = ''
    this.loading = false
    this.showLoading = null
    this.data = {
      article: null,
      files: [],
    }
    this.showcomments = false

    if (window.__nfpdata) {
      this.path = m.route.param('id')
      this.data = window.__nfpdata
      window.__nfpdata = null
      this.afterData()
    } else {
      this.fetchArticle(vnode)
    }
  },

  onbeforeupdate: function(vnode) {
    if (this.path !== m.route.param('id')) {
      this.fetchArticle(vnode)
    }
  },

  fetchArticle: function(vnode) {
    this.error = ''
    this.path = m.route.param('id')
    this.showcomments = false

    if (this.showLoading) {
      clearTimeout(this.showLoading)
    }

    if (this.data.article) {
      this.showLoading = setTimeout(() => {
        this.showLoading = null
        this.loading = true
        m.redraw()
      }, 150)
    } else {
      this.loading = true
    }

    api.sendRequest({
      method: 'GET',
      url: '/api/articles/' + this.path,
    })
    .then((result) => {
      this.data = result
      this.afterData()
    }, (err) => {
      this.error = err.message
    })
    .then(() => {
      clearTimeout(this.showLoading)
      this.showLoading = null
      this.loading = false
      m.redraw()
    })
  },

  afterData: function() {
    if (!this.data.article) {
      this.error = 'Article not found'
    }
  },

  view: function(vnode) {
    let article = this.data.article

    return [
      this.loading
        ? m('.inside.vertical', [
            m('div.actions', m('div.lb-link')),
            m('article.fullsize', [
              m('h2.title', m('div.lb-main.lb--long')),
              m('div.row', [
                m('div.cover', m('picture.lb.nobg')),
                m('div.description', [
                  m('div.lb-main.lb--long'),
                  m('div.lb-main'),
                  m('div.lb-main.lb--medium'),
                  m('div.lb-main.lb--medium'),
                  m('div.lb-main'),
                  m('p', m.trust('&nbsp;')),
                  m('fileinfo', [
                    m('div.lb-main.lb--slim.lb--longest'),
                    m('ul', [
                      m('li', m('div.lb-main.lb--slim.lb--longest')),
                      m('li', m('div.lb-main.lb--slim.lb--longest')),
                    ])
                  ]),
                ]),
              ]),
            ]),
          ])
        : null,
      !this.loading && this.error === 'Article not found'
        ? NotFoundView.view()
        : null,
      !this.loading && this.error && this.error !== 'Article not found'
        ? m('div.wrapper', m('div.error', {
            onclick: () => {
              this.error = ''
              this.fetchPage(vnode)
            },
          }, 'Article error: ' + this.error + '. Click here to try again'))
        : null,
      (!this.loading && article
        ? m('.inside.vertical', [
            m('div.actions', [
              '« ',
              m(m.route.Link, {
                href: article.page_path
                  ? '/page/' + article.page_path
                  : '/'
                }, article.page_name || 'Home'),
              Authentication.currentUser
                ? [
                    m('div.filler'),
                    'Actions:',
                    m(m.route.Link, { href: '/admin/articles/' + article.id }, 'Edit article'),
                  ]
                : null,
            ]),
            article ? m(Article, { full: true, files: this.data.files, article: article }) : null,
            window.LoadComments
              ? m('div#hyvor-talk-view', { oncreate: function() {
                  window.HYVOR_TALK_CONFIG = {
                    url: false,
                    id: article.path,
                    loadMode: scroll,
                  }
                  if (!window.HyvorLoaded) {
                    window.HyvorLoaded = true
                    var s = document.createElement('script')
                    s.src = 'https://talk.hyvor.com/web-api/embed.js';
                    s.type = 'text/javascript'
                    // s.setAttribute('crossorigin', '')
                    // s.setAttribute('data-timestamp', +new Date());
                    document.body.appendChild(s);
                  } else {
                    hyvor_talk.reload()
                  }
                }}, m('div.loading-spinner'))
            : m('button.comments', {
              style: 'display: none',
                onclick: function() { window.LoadComments = true },
              }, 'Open comment discussion'),
          ])
        : null),
    ]
  },
}

module.exports = SiteArticle
