local getArgs = require('Module:Arguments').getArgs
local p = {}

local maasa = mw.loadData("Module:තිථි මං සළකුණු/දත්ත").maasa
local paksha = mw.loadData("Module:තිථි මං සළකුණු/දත්ත").paksha
local thithi = mw.loadData("Module:තිථි මං සළකුණු/දත්ත").thithi

local function scan_table(table, item)
    local idxM = -1
    for k, v in pairs( table ) do
        -- process each key-value pair
        if item == v then
            idxM = k
            valM = v
            break
        end
    end
    return idxM
end

local function get_code_from_thithi(th)
    -- විච්ල්‍යයන්
    local valMaasa = -1
    local valPaksha = -1
    local valThithi = -1

    valMaasa = th.maasa
    valPaksha = th.paksha
    valThithi = th.thithi + 1

    local code = 0
    code = (valMaasa * 30)
    code = code + (valPaksha * 15)
    code = code + valThithi

    code = code - 15
    return code
end

local function get_thithi_from_code(code)
    -- විච්ල්‍යයන්
    local valMaasa = -1
    local valPaksha = -1
    local valThithi = -1

    local answer = code + 15
    valMaasa = math.floor(answer / 30)
    valThiha = (answer % 30) - 1
    valPaksha = math.abs(math.floor((valThiha) / 15))
    valThithi = (valThiha % 15) 

    local ret = {}
    ret.maasa = valMaasa
    ret.paksha = valPaksha
    ret.thithi = valThithi
    -- return valMaasa .. "-" .. valPaksha .. "-" .. valThithi
    return ret
end

local function succession(frame, args)
    local bef = args["පෙර"]
	local aft = args["පසු"]
    local title = args["තිථිය"]

    local idxM = 0
    local valM = ""

    local idxMaasa = -1
    local idxPaksha = -1
    local idxThithi = -1

    local next_thithi_maasa = ""
    local next_thithi_thithi = ""
    local next_thithi_paksha = ""
    local prev_thithi_maasa = ""
    local prev_thithi_thithi = ""
    local prev_thithi_paksha = ""

    if title == nil then
        title = mw.title.getCurrentTitle().text
    end

    -- සියළුම අගයන් ලබා දී ඇත්නම් කිරීමට කිසිවක් නොමැත
    if bef == nil or aft == nil then
        local s = title
        local items = mw.text.split( s, "%s+" )

        -- අමාවක සහ පසළොස්වක සඳහා පක්ෂය දැක්වීම අනිවාර්ය නොවේ
        if items[3] == nil then
            if items[2] == "අමාවක" then
                items[3] = "පසළොස්වක"
                items[2] = "අව"
            else
                items[3] = items[2]
                items[2] = "පුර"
            end
        end

        idxMaasa = scan_table(maasa, items[1])
        idxPaksha = scan_table(paksha, items[2])
        idxThithi = scan_table(thithi, items[3])

        local th = {}
        th.maasa = idxMaasa
        th.paksha = idxPaksha
        th.thithi = idxThithi
        th_code = get_code_from_thithi(th)

        th_bef = get_thithi_from_code(th_code - 1)
        th_aft = get_thithi_from_code(th_code + 1)

        prev_thithi_maasa = maasa[th_bef.maasa]
        prev_thithi_paksha = paksha[th_bef.paksha]
        prev_thithi_thithi = thithi[th_bef.thithi]

        next_thithi_maasa = maasa[th_aft.maasa]
        next_thithi_paksha = paksha[th_aft.paksha]
        next_thithi_thithi = thithi[th_aft.thithi]

        -- අගය ලබා ගැනීම
        bef=prev_thithi_maasa .. " " .. prev_thithi_paksha .. " " .. prev_thithi_thithi
        aft=next_thithi_maasa .. " " .. next_thithi_paksha .. " " .. next_thithi_thithi
    end

    if bef == nil then
        bef = "බක් අව තෙළෙස්වක"
    end
    if aft == nil then
        aft = "බක් අමාවක"
    end

    local retVal = frame:expandTemplate{ title = 'තිථි මං සළකුණු/පෙර-පසු-තිථි', args = { bef, aft, title } }
    return retVal
end

function p.get_thithi_from_code(thithi)
end

function p.get_code_from_thithi(thithi)
    local s = thithi
    local items = mw.text.split( s, "%s+" )

    local idxMaasa = scan_table(maasa, items[1])
    local idxPaksha = scan_table(paksha, items[2])
    local idxThithi = scan_table(thithi, items[3])

    local th = {}
    th.maasa = idxMaasa
    th.paksha = idxPaksha
    th.thithi = idxThithi
    return get_code_from_thithi(th)
end

function p.pera_thithi(thithi)
end

function p.pasu_thithi(thithi)
end

function p.main(frame)
	local args = getArgs(frame)
	return p._main(frame, args)
end

function p._main(frame, args)
	return succession(frame, args)
end

return p
"https://si.wikipedia.org/w/index.php?title=Module:තිථි_මං_සළකුණු&oldid=685860" වෙතින් සම්ප්‍රවේශනය කෙරිණි