Módulo:ECD-antigo

local m = {}

function m.EAD (frame)
  -- Esta é a função antiga que não é mais usada, ela é mantida apenas para permitir a visualização
  -- correta de versões antigas da EAD/Lista, a versão atualmente usada é a m.link
  
  local page = frame.args[1]
  return m.placar(page)
end

function m.link (frame)
  -- Função que gera a linha da tabela em [[Wikipédia:Escolha do artigo em destaque/Lista]]

  local titulo = frame.args[1]
  local title = mw.title.new('Wikipédia:Escolha do artigo em destaque/' .. titulo)
  local page = title:getContent()
  
  local placar = m.placar(page)
  
  -- Colocando os dados na tabela
  local template = [=[|-
|[[Wikipédia:Escolha do artigo em destaque/%s|%s]] 
|style="text-align:center; font-size:smaller;"|[[%s|Art]] / [[Discussão:%s|disc]]%s]=]
  return mw.ustring.format(template, titulo, titulo, titulo, titulo, placar)
end

function m.placar (page)
  frame = mw.getCurrentFrame()
  meses = {["janeiro"] = "01", ["fevereiro"] = "02", ["março"] = "03", ["abril"] = "04", ["maio"] = "05", ["junho"] = "06",
      ["julho"] = "07", ["agosto"] = "08", ["setembro"] = "09", ["outubro"] = "10", ["novembro"] = "11", ["dezembro"] = "12"}
  local placar = {0,0,0}
  
  -- Busca o fim do prazo de votação no texto
  local a, b, prazo, hora, min, dia, mes, ano = mw.ustring.find(page, "<section begin=\"fim do prazo\"/>((%d%d)h(%d%d)min '''UTC''' de (%d%d?) de (%S+) de (%d%d%d%d))")
  -- Busca o fim do prazo do speed close
  -- esta linha deve ser mantida para permitir a visualisação de versões antigas da lista)
  local a, b, diab, mesb, anob = mw.ustring.find(page, "voto contra no dia (%d%d?) de (%S+) de (%d%d%d%d)")
  dia, diab = #(dia or '') == 1 and "0" .. dia or dia, #(diab or '') == 1 and "0" .. diab or diab
  -- Busca outros pontos da página usados para delimitar a busca por votos
  local destaque = mw.ustring.find(page, "{{Voto artigo destacado}}")
  local bom = mw.ustring.find(page, "{{Voto artigo bom}}")
  local nenhum = mw.ustring.find(page, "{{Voto artigo normal}}")
  local coment = mw.ustring.find(page, "== Comentários e sugestões ==")
  local i = mw.ustring.find(page, "\n#[^:\n]")
  
  -- Contagem dos votos
  -- placar[3] são os votos para destacado, placar[2] votos para bom e placar[1] para artigo normal
  while i do
    if i > coment then
    elseif i > (nenhum or 0) then placar[1] = placar[1] + 1
    elseif i > bom then placar[2] = placar[2] + 1
    elseif destaque and i > destaque then placar [3] = placar[3] + 1
    end
    -- Busca linha de voto
    i = mw.ustring.find(page,"\n#[^:\n]", i + 10)
  end
  
  -- Verificação do prazo
  local agora = tonumber(os.date("%Y%m%d%H%M"))
  local timestamp = tonumber((ano or '0000') .. (meses[mes] or '00') .. (dia or '00') .. (hora or '00') .. (min or '00'))
  local timestampb = diab and tonumber(anob .. meses[mesb] .. diab .. hora .. min)
  -- tempo == 2 quer dizer que terminou o prazo, e tempo == 1 que terminou o prazo do speed close
  local tempo = timestamp < agora and 2 or diab and timestampb < agora and 1 or 0
  
  -- Decide o formato em que o prazo é exibido na tabela
  if not destaque and diab and placar[1] == 0 and tempo == 0 then
      -- exibir data para speed close em eleição para artigo bom
      -- caso um prazo de speed close tenha sido encontrado na página de votação
      prazo = mw.ustring.format(
      "style=\"text-align:center;white-space:nowrap;\" title=\"speedy close: %s de %s de %s\"|%s" ..
      frame:callParserFunction('#tag:ref', {'', name = 'speed-close'}) , diab, mesb, anob, prazo)
  elseif tempo == 2 then
      -- fundo vermelho quando o prazo termina
      prazo = "style=\"text-align:center;white-space:nowrap; background-color:#FCC\"|" .. (prazo or 0)
  else
      prazo = "style=\"text-align:center;white-space:nowrap;\"|" .. prazo
  end
      
  -- Porcentagem de votos para artigo destacado
  local percentD
  if destaque and placar[3] + placar[2] > 0 then
      local p = math.floor(placar[3] / (placar[1] + placar[2] + placar[3]) * 100)
      local negrito = (placar[3] >= 7 and placar[3] >= 3 * (placar[2] + placar[1]))
      percentD = negrito and "'''" .. p .. "%'''" or p > 0 and p .. "%" or "0"
  else
      percentD = "—"
  end
  
  -- Porcentagem de votos para artigo bom
  local percentB
  if placar[3] + placar[2] > 0 then
      local p = math.floor((placar[2] + placar[3]) / (placar[1] + placar[2] + placar[3]) * 100)
      local negrito = (tempo == 1 and placar[2] + placar[3] >= 7
                       and placar[2] + placar[3] >= 3 * placar[1]
                       and percentD ~= "'''100%'''"
                       or not destaque and tempo == 0
                       and placar[2] >= 5 and placar [1] == 0)
      percentB = negrito and "'''" .. p .. "%'''" or p .. "%"
  else
      percentB = "0"
  end
  
  -- Placar
  local placarD = destaque and (placar[3] >= 7 and placar[3] >= 3 * (placar[2] + placar[1]) and
      "style=\"text-align:center;background-color:#FFF8CC\"|'''" .. placar[3] .. "'''" or -- Artigo destacado
      "style=\"text-align:center;\"|" .. placar[3]) or
      "style=\"text-align:center;\"|—" -- A eleição é para artigo bom
  local placarB = (not destaque and placar[2] >= 5 and placar[3] + placar[1] == 0 and tempo == 0 or
      placar[2] >= 7 and placar[2] >= 3 * (placar[3] + placar[1])) and
      "style=\"text-align:center;background-color:#CCCCCC\"|'''" .. placar[2] .. "'''" or -- Artigo bom
      "style=\"text-align:center;\"|" .. placar[2]
  local placarN = tempo == 2 and #placarD < 40 and #placarB < 40 and
      "style=\"text-align:center;background-color:#FCC\"|'''" .. placar[1] .. "'''" or -- Artigo normal
      "style=\"text-align:center;\"|" .. placar[1]
  
  -- Colocando os dados na tabela
  return mw.ustring.format("\n|%s\n|%s\n|%s\n|%s\n|style=\"text-align:center;\"|%s||style=\"text-align:center;\"|%s",
      placarD, placarB, placarN, prazo, percentD, percentB)

end

return m