Documentation for this module may be created at Module:Races/doc

local p = {}
local raceNameTls = mw.loadJsonData('Data:Races/Names')
local horseNameTls = mw.loadJsonData('Data:Races/HorseNames')
local jockeyNameTls = mw.loadJsonData('Data:Races/JockeyNames')
local trackNameTls = mw.loadJsonData('Data:Races/TrackNames')

function p.loadRaceHistoryJson(horseName)
    return mw.loadJsonData('Data:Races/RaceHistory/' .. horseName)
end

function p.translateHorseName(horseName)
	for i, v in ipairs(horseNameTls) do
		if v['name_jp'] == horseName and v['name_en'] then
			return v['name_en']
		end
	end
	return horseName
end

function p.translateRaceName(raceName)
	for i, v in ipairs(raceNameTls) do
		for j, n in ipairs(v['names_jp']) do
			if n == raceName then
				return v['name_en'], v['grade']
			end
		end
	end
	return raceName, ''
end

function p.translateJockeyName(jockeyName)
	for i, v in ipairs(jockeyNameTls) do
		if v['name_jp'] == jockeyName and v['name_en'] then
			return v['name_en']
		end
	end
	return jockeyName
end

function p.translateTrackName(trackName)
	for i, v in ipairs(trackNameTls) do
		for j, n in ipairs(v['names_jp']) do
			if n == trackName then
				return v['name_en']
			end
		end
	end
	return trackName
end

function p.raceHistoryTable(frame)
    local horseName = mw.text.decode(frame.args[1])
    local json = p.loadRaceHistoryJson(horseName)

	local text = '<div class="noresize">\n{| class="wikitable sortable"\n'
	text = text .. '|+ style="caption-side:bottom;"|<small>\'\'Race data sourced from [https://netkeiba.com netkeiba].\'\'</small>\n|-\n'
	text = text .. '! Date !! Racecourse !! Race !! Grade !! Distance !! Gate !! Odds !! Fav. !! Fin. !! Time !! Margin !! Jockey !! Winner (Runner-Up) !! Other Umamusume\n'
    for i, race in ipairs(json) do
    	local raceDate = race['date']
    	local racecourse = p.translateTrackName(race['racecourse'])
    	local raceName, raceGrade = p.translateRaceName(race['race'])
    	local classGrade = 'grade ' .. string.lower(raceGrade)
    	local raceLink = 'https://db.netkeiba.com/race/' .. race['netkeibaId']
    	local ground = race['ground'] == 'dirt' and 'D' or 'T'
    	local distance = race['distance'] or ""
    	local horseNumber = race['number'] or ""
    	local odds = race['odds']
    	local oddsFmt = odds and string.format("%.1f", odds) or ''
    	local fav = race['favorite'] or ""
    	local classFav = 'place n' .. fav
    	local place = race['place'] or ""
    	local classPlace = 'place n' .. place
    	local raceTime = race['time'] or ""
    	local margin = race['delta']
    	local marginFmt = margin and string.format("%.1f", margin) or ''
    	local jockey = p.translateJockeyName(race['jockey'])
    	local firstOrSecond = p.translateHorseName(race['firstOrSecond'])
    	if place == 1 and firstOrSecond then
    		firstOrSecond = '(' .. firstOrSecond .. ')'
    	end
    	if not firstOrSecond then firstOrSecond = '' end
    	local otherUmasList = {}
    	for j, v in ipairs(race['otherUmas']) do
			table.insert(otherUmasList, '[[' .. p.translateHorseName(v) .. ']]')
    	end
    	local otherUmas = table.concat(otherUmasList, ', ')
    	text = text ..
    		string.format('|-\n| %s || %s || class="%s"|[%s %s] || class="%s"|%s || %s %sm || %s || %s || class="%s"|%s || class="%s"|%s || %s || %s || %s || %s || %s\n',
    			raceDate, racecourse, classGrade, raceLink, raceName, classGrade, raceGrade, ground, distance, horseNumber, oddsFmt, classFav, fav, classPlace, place, raceTime, marginFmt, jockey, firstOrSecond, otherUmas)
    end
    text = text .. "|}\n</div>"
    
    return text
end

return p