local gotadj = require("Module:got-adjective")
local translit = require("Module:Goth-translit")
local ScribuntoUnit = require("Module:ScribuntoUnit")
local suite = ScribuntoUnit:new()

local function mkframe(args)
	local parent = {}
	local child = {}
	parent.getParent = function (self) return nil end
	child.getParent = function (self) return parent end
	parent.args = args
	child.args = args
	
    return child
end

local function tblhdr(stem) return [[
{| class="wikitable inflection-table vsSwitcher" style="border-style: double; border-width: 3px;" cellspacing="1"
|-
! class="vsToggleElement" style="background: #CCC; min-width: 44em; text-align: left;" colspan="4" | ]] .. stem end

local function inflhdr(inflection) return [[
|- class="vsHide"
! style="background: #DDD;" colspan="4" | ]] .. inflection end

local function numberhdr(number) return [[
|- class="vsHide"
! style="min-width: 8em;" | ]] .. number .. '\n' .. [[
! style="min-width: 12em;" | Masculine 
! style="min-width: 12em;" | Feminine 
! style="min-width: 12em;" | Neuter 
]] end

local function casehdr(case) return [[
|- class="vsHide"
! ]] .. case end

local function entry(Latn)
	local nomacron = {
		['ā'] = 'a',
		['ē'] = 'e',
		['ī'] = 'i',
		['ō'] = 'o',
		['ū'] = 'u'
	}
	local Goth = {}
	for i, t in ipairs(Latn) do
		Goth[i] = translit.tr_reverse(Latn[i])
	end
	local result = { '| ' }
	for i, t in ipairs(Goth) do
		if i > 1 then table.insert(result, ', ') end
		table.insert(result, '<span class="Goth" lang="got">[[')
		table.insert(result, t)
		table.insert(result, '#Gothic|')
		table.insert(result, t)
		table.insert(result, ']]</span>')
	end
	table.insert(result, '<br/>')
	for i, t in ipairs(Latn) do
		local n = mw.ustring.gsub(t, "[āēīōū]", nomacron)
		if i > 1 then table.insert(result, ', ') end
		table.insert(result, '<span class="None" lang="got">[[')
		table.insert(result, n)
		table.insert(result, '#Gothic|')
		table.insert(result, t)
		table.insert(result, ']]</span>')
	end
	return table.concat(result)
end

function suite:test_a_adjective()
	self:assertEquals(table.concat({
		tblhdr('A-stem '),
		inflhdr('Strong (indefinite) inflection '),
		numberhdr('Singular '),
		casehdr('Nominative '), entry{'agls'}   , entry{'agla'}    , entry{'agl', 'aglata'},
		casehdr('Accusative '), entry{'aglana'} , entry{'agla'}    , entry{'agl', 'aglata'},
		casehdr('Genitive ')  , entry{'aglis'}  , entry{'aglaizōs'}, entry{'aglis'}        ,
		casehdr('Dative ')    , entry{'aglamma'}, entry{'aglai'}   , entry{'aglamma'}      ,
		numberhdr('Plural '),
		casehdr('Nominative '), entry{'aglai'}  , entry{'aglōs'}   , entry{'agla'}         ,
		casehdr('Accusative '), entry{'aglans'} , entry{'aglōs'}   , entry{'agla'}         ,
		casehdr('Genitive '), entry{'aglaizē'}  , entry{'aglaizō'} , entry{'aglaizē'}      ,
		casehdr('Dative '), entry{'aglaim'}     , entry{'aglaim'}  , entry{'aglaim'}       ,
		inflhdr('Weak (definite) inflection '),
		numberhdr('Singular '),
		casehdr('Nominative '), entry{'agla'}   , entry{'aglō'}    , entry{'aglō'}         ,
		casehdr('Accusative '), entry{'aglan'}  , entry{'aglōn'}   , entry{'aglō'}         ,
		casehdr('Genitive ')  , entry{'aglins'} , entry{'aglōns'}  , entry{'aglins'}       ,
		casehdr('Dative ')    , entry{'aglin'}  , entry{'aglōn'}   , entry{'aglin'}        ,
		numberhdr('Plural '),
		casehdr('Nominative '), entry{'aglans'} , entry{'aglōns'}  , entry{'aglōna'}       ,
		casehdr('Accusative '), entry{'aglans'} , entry{'aglōns'}  , entry{'aglōna'}       ,
		casehdr('Genitive ')  , entry{'aglanē'} , entry{'aglōnō'}  , entry{'aglanē'}       ,
		casehdr('Dative ')    , entry{'aglam'}  , entry{'aglōm'}   , entry{'aglam'}        ,
		'|}'
	}, '\n'), gotadj.a(mkframe{"agl"}))
end

return suite