
--- Does the string end with a specific character?
--- http://lua-users.org/wiki/StringRecipes
local function ends_with(str, ending)
   return string.sub(str.text, -1) == ending
end

--- Trim string
local function trim(s)
  local l = 1
  while string.sub(s,l,l) == ' ' do
    l = l+1
  end
  local r = string.len(s)
  while string.sub(s,r,r) == ' ' do
    r = r-1
  end
  return string.sub(s,l,r)
end

--- Put a space before the string
local function prependspace(s)
  if s then
    return " " .. pandoc.utils.stringify(s)
  else
    return ""
  end
end

-- Are the affiliations different or same across authors?
local are_affiliations_different = function(authors)
  -- Superscript id
  local superii = ""
  
  -- List of superii
  local hash = {}
  -- index of superii
  local res = {}
      
      --Check if affilations are the same for each author
      for i, a in ipairs(authors) do
        superii = ""
        if a.affiliations then
          for j, aff in ipairs(a.affiliations) do
            if j > 1 then
              superii = superii .. ","
            end
            superii = superii .. aff.number
          end
        end

        if (not hash[superii]) then
          res[#res+1] = superii 
          hash[superii] = true
        end

      end
  
  return #res > 1
end

local function makeauthorname(a)

  local authorname = a.literal
  -- Make author name
  if pandoc.utils.type(a.literal) == "List" then
    if a.literal[1].literal then
      authorname = a[1].literal
    else
      authorname = ""
      authorname = authorname .. prependspace(a.literal[1].given) 
      authorname = authorname .. prependspace(a.literal[1]["dropping-particle"]) 
      authorname = authorname .. prependspace(a.literal[1]["non-dropping-particle"]) 
      authorname = authorname .. prependspace(a.literal[1].family) 
      authorname = pandoc.Inlines(trim(authorname))
    end
  end
  return authorname
end

Meta = function(meta)
  meta.apatitle = nil
  meta.apatitledisplay = nil
  if meta.title then
    meta.apatitle = meta.title:clone()
    meta.apatitledisplay = meta.title:clone()
  end
  
  if meta["by-author"] then
    meta.affiliationsdifferent = are_affiliations_different(meta["by-author"])
    
    for i,j in ipairs(meta["by-author"]) do
      j.apaauthordisplay = makeauthorname(j.name)
    end
  end

  if meta.subtitle then
    if not ends_with(meta.apatitledisplay[#meta.apatitledisplay], ":") then
      meta.apatitledisplay:insert(pandoc.Str(":"))
    end
    meta.apatitledisplay:insert(pandoc.Space())
    meta.apatitledisplay:extend(meta.subtitle)
  end
  meta.apasubtitle = meta.subtitle
  meta.apaauthor = meta.author
  meta.apadate =  meta.date
  meta.apaabstract = meta.abstract
  if meta.documentmode then
  else
     meta.documentmode = "man"
  end
  --Prevents pandoc from fomatting .docx document the way it thinks it should.
  if FORMAT == "docx" then
      meta.title = nil
      meta.subtitle = nil
      meta.author = nil
      meta.date = nil
      meta.abstract = nil
  end
  return meta
end



