local a = require('Módulo:Citação/CS1')


--[[--------------------------< a . a r x i v >------------------------------------------------------

Este é o método principal da predefinição {{citar arxiv}}.

]]
a.arxiv = function(frame)
    local config, args, A = tratarArgumentos(frame)
    config.CitationClass = ''
    local B
    local classe = 'arxiv'

    -- considerando as peculiaridade de {{citar arxiv}} antes da geração de dados COinS
    do
        local ID_list = extract_ids(args)
        -- |arxiv= or |eprint= requeridos para citar arxiv
        if not is_set (ID_list['ARXIV']) then
            -- adiciona mensagem de erro
            table.insert(z.message_tail, { set_error( 'arxiv_missing', {}, true )})
        -- series é um alias para version
        elseif is_set (A.Series) then
            -- concatena version no fim do identificador arxiv
            ID_list['ARXIV'] = ID_list['ARXIV'] .. A.Series
            A.Series = '' -- esvaziado
            deprecated_parameter ('version') -- depreciado apenas para citar arxiv
        end

        -- uma lista bruta de parâmetros que não são suportados por citar arxiv
        if first_set ({A.AccessDate, A.At, A.Authors, A.Chapter, A.Format, A.Page, A.Pages
        , A.Periodical, A.PublisherName, A.URL, ID_list.ASIN, ID_list.BIBCODE, ID_list.DOI
        , ID_list.ISBN, ID_list.ISSN, ID_list.JFM, ID_list.JSTOR, ID_list.LCCN, ID_list.MR
        , ID_list.OCLC, ID_list.OL, ID_list.OSTI, ID_list.PMC, ID_list.PMID, ID_list.RFC
        , ID_list.SSRN, ID_list.USENETID, ID_list.ZBL}, 28)
        then
            -- adiciona mensagem de erro
            table.insert(z.message_tail, { set_error('arxiv_params_not_supported', {}, true)})

            -- esvazia as seguintes strings correspondentes a argumetos não suportados
            A.AccessDate = ''
            A.Authors = ''
            A.PublisherName = '' -- se necessário, usar citar periódico ou outros
            A.Chapter = ''
            A.URL = ''
            A.Format = ''
            A.Page = ''; A.Pages = ''; A.At = ''
        end
        -- para evitar processamento desnecessário recriando a ID_list na função citation0
        config.ID_list = ID_list
        -- ID_list local encerra ao fim do escopo, e em config será desreferênciada depois
    end
    -- periodical não permitido em citar arxiv; se necessário usar citar periódico
    A.Periodical = ''

    A.TitleType = set_titletype (classe, A.TitleType)

    config.ChapterNaoSuportado = true
    do
        local chap_param
        -- pega o nome do parâmetro de um destes peta-parâmetros relacionados a "chapter"
        if is_set (A.Chapter) then
            chap_param = A:ORIGIN ('Chapter')
        elseif is_set (A.TransChapter) then
            chap_param = A:ORIGIN ('TransChapter')
        elseif is_set (A.ChapterURL) then
            chap_param = A:ORIGIN ('ChapterURL')
        elseif is_set (A.ScriptChapter) then
            chap_param = A:ORIGIN ('ScriptChapter')
        else is_set (A.ChapterFormat)
            chap_param = A:ORIGIN ('ChapterFormat')
        end

        -- se foi encontrado algum...
        if is_set (chap_param) then
            -- ... adiciona mensagem de erro
            table.insert( z.message_tail, { set_error( 'chapter_ignored', {chap_param}, true ) } )
            -- e esvazia para evitar problemas com concatenações
            A.Chapter = ''
            A.TransChapter = '';
            A.ChapterURL = '';
            A.ScriptChapter = '';
            A.ChapterFormat = '';
        end
    end

    config.TituloFormatado = {}
    do
        local TransTitle = A.TransTitle
        local Title = A.Title
        if is_set(A.TitleLink) and is_set(A.Title) then
            Title = "[[" .. A.TitleLink .. "|" .. Title .. "]]"
        end
        if (is_set(Title)) then
            Title = kern_quotes (Title)
            Title = wrap_style ('quoted-title', Title)
            config.TituloFormatado.Title = Title
        end
        if (is_set(TransTitle)) then
            TransTitle= wrap_style ('trans-quoted-title', TransTitle ) -- .. ", "
            config.TituloFormatado.TransTitle = TransTitle
        end
    end

    -- Função com o código abstraído
    A, B = citation0(config, args, A)

    B.coins_table.Periodical = 'arXiv' -- define arXiv para o COinS

    config.CitationClass = classe
    B.config = config

    return textoFinal(A, B)
end

return a