--[[
 * Modulo impiegato dal Template:New Grove per creare una citazione alle 
 * enciclopedie Grove (vedi voce Grove Dictionary of Music and Musicians).
 * Il modulo è un wrapper che richiama il Modulo:Citazione dopo avere filtrato
 * i parametri, aggiungendo i valori predefiniti (titolo, ISBN, curatori etc.) 
 * e rimappando i parametri posizionali, che nel Template:New Grove hanno un 
 * diverso ordine dai template Cita (giustificato da una sua logica).
--]]

local p = {}

-- parametri posizionali: {{New Grove|edizione|nome|cognome|voce|volume|pagine|cid|wl}}
-- edizioni: 1, 2, inst, opera, american, art1, art2, jazz1, jazz2

function p.citation(frame)
    
    local pargs = frame:getParent().args
    
    -- wl determina se inserire o meno un wikilink nel titolo dell'opera
    local wl = pargs[8] or pargs['wl'] or Nil
    wl = wl and wl ~= ''
    
    -- sceglie edizione (per avere i campi precompilati)
    local edition = pargs[1] or pargs['edizione'] or Nil
    
    -- conversione parametri posizionali:
    -- il Modulo:Citazione e il Template:New Grove hanno un ordine diverso
    -- per i parametri posizionali
    pargs['nome']    = pargs[2] or pargs['nome']
    pargs['cognome'] = pargs[3] or pargs['cognome']
    pargs['voce']    = pargs[4] or pargs['voce']
    pargs['volume']  = pargs[5] or pargs['volume']
    pargs['pagine']  = pargs[6] or pargs['pagine']
    pargs['cid']     = pargs[7] or pargs['cid']
        
    -- New Grove ed. 1
    if edition == "1" then
        if wl then
            pargs['titolo'] = "The New Grove Dictionary of Music and Musicians"
        else
            pargs['titolo'] = "[[Grove Dictionary of Music and Musicians|The New Grove Dictionary of Music and Musicians]]"
        end
        pargs['curatore'] = "Stanley Sadie"
        pargs['edizione'] = "1ª ed."
        pargs['editore']  = "MacMillian"
        pargs['città']    = "Londra"
        pargs['anno']     = "1980"
        pargs['ISBN']     = "978-0333231111"
        
    -- New Grove ed. 2
    elseif edition == "2" then
        if wl then
            pargs['titolo'] = "The New Grove Dictionary of Music and Musicians"
        else
            pargs['titolo'] = "[[Grove Dictionary of Music and Musicians|The New Grove Dictionary of Music and Musicians]]"
        end
        pargs['curatore']  = "Stanley Sadie"
        pargs['curatore2'] = "John Tyrrell"
        pargs['edizione']  = "2ª ed."
        pargs['editore']   = "Oxford University Press"
        pargs['anno']      = "2001"
        pargs['ISBN']      = "978-0195170672"
        
    -- Grove Dictionary of Musical Instruments
    elseif edition == "inst" then
        pargs['titolo']   = "The New Grove Dictionary of Musical Instruments"
        pargs['curatore'] = "Stanley Sadie"
        pargs['editore']  = "MacMillian"
        pargs['città']    = "Londra"
        pargs['anno']     = "1984"
        pargs['ISBN']     = "0943818052"
        
    -- Grove Dictionary of Opera
    elseif edition == "opera" then
        if wl then
            pargs['titolo'] = "[[New Grove Dictionary of Opera|The New Grove Dictionary of Opera]]"
        else
            pargs['titolo'] = "The New Grove Dictionary of Opera"
        end
        pargs['curatore'] = "Stanley Sadie"
        pargs['edizione'] = "1ª ed."
        pargs['editore']  = "MacMillian"
        pargs['città']    = "Londra"
        pargs['anno']     = "1992"
        pargs['ISBN']     = "0333485521"
        
    -- Grove Dictionary of American Music
    elseif edition == "american" then
        pargs['titolo']   = "The New Grove Dictionary of American Music"
        pargs['curatore'] = "Stanley Sadie"
        pargs['curatore'] = "Hugh Wiley Hitchcock"
        pargs['editore']  = "MacMillian"
        pargs['città']    = "Londra"
        pargs['anno']     = "1986"
        pargs['ISBN']     = "0333378792"
        
    -- Grove Dictionary of Art ed. 1
    elseif edition == "art1" then
        pargs['titolo']    = "The Grove Dictionary of Art"
        pargs['curatore']  = "Jane Turner"
        pargs['edizione']  = "1ª ed."
        pargs['editore']   = "Oxford University Press"
        pargs['anno']      = "1996"
        pargs['ISBN']      = "1884446000"
        
    -- Grove Dictionary of Art ed. 2
    elseif edition == "art2" then
        pargs['titolo']    = "The Grove Dictionary of Art"
        pargs['curatore']  = "Jane Turner"
        pargs['edizione']  = "2ª ed."
        pargs['editore']   = "Oxford University Press"
        pargs['anno']      = "2003"
        pargs['ISBN']      = "0195170687"
    
    -- Grove Dictionary of Jazz ed. 1
    elseif edition == "jazz1" then
        pargs['titolo']    = "The New Grove Dictionary of Jazz"
        pargs['curatore']  = "Barry Kernfeld"
        pargs['edizione']  = "1ª ed."
        pargs['editore']   = "MacMillian"
        pargs['anno']      = "1988"
        pargs['ISBN']      = "0312113579"
    
    -- Grove Dictionary of Jazz ed. 2
    elseif edition == "jazz2" then
        pargs['titolo']    = "The New Grove Dictionary of Jazz"
        pargs['curatore']  = "Barry Kernfeld"
        pargs['edizione']  = "2ª ed."
        pargs['editore']   = "Oxford University Press"
        pargs['anno']      = "2003"
        pargs['ISBN']      = "1561592846"
        
    -- parametro edizione assente o invalido
    else
        return mw.getCurrentFrame():expandTemplate {
            title = "Errore template",
            args = {
                "edizione",
                "Citazione Grove",
                t = not edition or "r",
                cat = "Errori di compilazione del template New Grove"
            }
        }
    end
    
    -- oggetto ambiente per la chiamata del Modulo:Citazione
    local cite_object = {
        cite_module = require("Modulo:Citazione"),
        args = pargs,
        frame = {
            args = {}
        }
    }
    function cite_object.getParent()
        return cite_object.frame
    end
    
    -- chiama la funzione citation dal Modulo:Citazione
    return cite_object.cite_module.citation(cite_object)
end

return p