text: /**
   * @module output/bibtex
   */
  
  import fetchBibTeXType from './type'
  import getBibTeXLabel from './label'
  import {format as getName} from '@citation-js/name'
  import {format as getDate} from '@citation-js/date'
  
  /**
   * Get BibTeX-JSON from CSL(-JSON)
   *
   * @access protected
   * @method getBibTeXJSON
   *
   * @param {CSL} src - Input CSL
   *
   * @return {Object} Output BibTeX-JSON
   */
  const getBibTeXJSON = function (src) {
    const res = {
      label: getBibTeXLabel(src),
      type: fetchBibTeXType(src.type)
    }
  
    const props = {}
  
    const simple = {
      'collection-title': 'series',
      'container-title': src.type === 'chapter' ? 'booktitle' : 'journal',
      edition: 'edition',
      event: 'organization',
      DOI: 'doi',
      ISBN: 'isbn',
      ISSN: 'issn',
      issue: 'number',
      language: 'language',
      note: 'note',
      'number-of-pages': 'numpages',
      PMID: 'pmid',
      PMCID: 'pmcid',
      publisher: 'publisher',
      'publisher-place': 'address',
      title: 'title',
      URL: 'url',
      volume: 'volume'
    }
  
    for (let prop in simple) {
      if (src.hasOwnProperty(prop)) {
        props[simple[prop]] = src[prop] + ''
      }
    }
  
    if (src.author) {
      props.author = src.author.map(name => getName(name, true)).join(' and ')
    }
    if (src.editor) {
      props.editor = src.editor.map(name => getName(name, true)).join(' and ')
    }
  
    if (!src.note && src.accessed) {
      props.note = `[Online; accessed ${getDate(src.accessed)}]`
    }
  
    if (src.page) {
      props.pages = src.page.replace('-', '--')
    }
  
    if (src.issued) {
      let dateParts = src.issued['date-parts'][0]
  
      if (dateParts.length > 0) {
        props.date = getDate(src.issued)
        props.year = dateParts[0].toString()
      }
      if (dateParts.length > 1) {
        props.month = dateParts[1].toString()
      }
      if (dateParts.length > 2) {
        props.day = dateParts[2].toString()
      }
    }
  
    res.properties = props
  
    return res
  }
  
  export default getBibTeXJSON
  