local common = require("Module:akk-common")


local function sound_stem(R, stems)
    stems = stems or {}
    stems.inf   = stems.inf or R[1].."u"..R[2]..R[2].."u"..R[3]
    stems.part  = stems.part or "mu"..R[1].."a"..R[2]..R[2].."i"..R[3]
    stems.adj   = stems.adj   or R[1].."u"..R[2]..R[2].."u"..R[3]
    stems.dur1  = stems.dur1  or R[1].."a"..R[2]..R[2].."a"..R[3]   
    stems.dur2  = stems.dur2  or stems.dur1
    stems.pret1 = stems.pret1 or R[1].."a"..R[2]..R[2].."i"..R[3]
    stems.pret2 = stems.pret2 or stems.pret1
    stems.perf1 = stems.perf1 or common.assimilate(R[1].."t").."a"..R[2]..R[2].."i"..R[3] 
    stems.perf2 = stems.perf2 or stems.perf1
    stems.prec  = stems.prec  or R[1].."a"..R[2]..R[2].."i"..R[3]
    stems.imp1  = stems.imp1  or R[1].."u"..R[2]..R[2].."i"..R[3]   
    stems.imp2  = stems.imp2  or stems.imp1
    return stems  
end

local function iii_weak(R, stems)
    stems = stems or {}
    stems.inf   = stems.inf or R[1].."u"..R[2]..R[2].."û"
    stems.part  = stems.part or "mu"..R[1].."a"..R[2]..R[2].."û"
    stems.adj   = stems.adj   or R[1].."u"..R[2]..R[2].."û"
    stems.dur1  = stems.dur1  or R[1].."a"..R[2]..R[2].."a"
    stems.dur2  = stems.dur2  or stems.dur1
    stems.pret1 = stems.pret1 or R[1].."a"..R[2]..R[2].."i"
    stems.pret2 = stems.pret2 or stems.pret1
    stems.perf1 = stems.perf1 or common.assimilate(R[1].."t").."a"..R[2]..R[2].."i"
    stems.perf2 = stems.perf2 or stems.perf1
    stems.prec  = stems.prec  or R[1].."a"..R[2]..R[2].."i"
    stems.imp1  = stems.imp1  or R[1].."u"..R[2]..R[2].."i"
    stems.imp2  = stems.imp2  or stems.imp1
    return stems  
end


return function (roots, stems) 
	local is_weak = {
		["a"] = true,
		["e"] = true,
		["i"] = true,
		["u"] = true,
		["'"] = true,
	}
	
	if is_weak[roots[3]] then 
		return iii_weak(roots, stems)
	end
	
	return sound_stem(roots, stems)
		
end