Mô đun:Bảng xếp hạng V.League 1 2025

local p = {}

-- Bảng dữ liệu xếp hạng và logo các đội (bao gồm tên đầy đủ và viết tắt)
local rankmap = {
["Thép Xanh Nam Định"] = {rank = 1, full = "Câu lạc bộ Thép Xanh Nam Định", logo = "Thepxanhnamdinh1.jpg"},
["Nam Định"] = {rank = 1, full = "Câu lạc bộ Thép Xanh Nam Định", logo = "Thepxanhnamdinh1.jpg"},
["TXNĐ"] = {rank = 1, full = "Câu lạc bộ Thép Xanh Nam Định", logo = "Thepxanhnamdinh1.jpg"},

["Hà Nội"] = {rank = 2, full = "Câu lạc bộ bóng đá Hà Nội", logo = "Logo HN FC.svg"},
["HN"] = {rank = 2, full = "Câu lạc bộ bóng đá Hà Nội", logo = "Logo HN FC.svg"},

["Công an Hà Nội"] = {rank = 3, full = "Câu lạc bộ Công an Hà Nội", logo = "Logo CAHN FC.svg"},
["CAHN"] = {rank = 3, full = "Câu lạc bộ bóng đá Công an Hà Nội", logo = "Logo CAHN FC.svg"},

["Viettel"] = {rank = 4, full = "Câu lạc bộ bóng đá Thể Công - Viettel", logo = "Logo CLB TC-VT.svg"},

["Hồng Lĩnh Hà Tĩnh"] = {rank = 5, full = "Câu lạc bộ bóng đá Hồng Lĩnh Hà Tĩnh", logo = "HLHT FC.svg"},
["Hà Tĩnh"] = {rank = 5, full = "Câu lạc bộ bóng đá Hồng Lĩnh Hà Tĩnh", logo = "HLHT FC.svg"},
["HLHT"] = {rank = 5, full = "Câu lạc bộ bóng đá Hồng Lĩnh Hà Tĩnh", logo = "HLHT FC.svg"},

["Hải Phòng"] = {rank = 6, full = "Câu lạc bộ bóng đá Hải Phòng", logo = "Hai Phong FC logo.svg"},
["HP"] = {rank = 6, full = "Câu lạc bộ bóng đá Hải Phòng", logo = "Hai Phong FC logo.svg"},

["Becamex Bình Dương"] = {rank = 7, full = "Câu lạc bộ bóng đá Becamex Bình Dương", logo = "Logo of Becamex Bình Dương FC.svg"},
["Bình Dương"] = {rank = 7, full = "Câu lạc bộ bóng đá Becamex Bình Dương", logo = "Logo of Becamex Bình Dương FC.svg"},
["BBD"] = {rank = 7, full = "Câu lạc bộ bóng đá Becamex Bình Dương", logo = "Logo of Becamex Bình Dương FC.svg"},

["Thanh Hóa"] = {rank = 8, full = "Câu lạc bộ bóng đá Đông Á Thanh Hóa ", logo = "Logo CLB DATH.svg"},
["TH"] = {rank = 8, full = "Câu lạc bộ bóng đá Đông Á Thanh Hóa", logo = "Logo CLB DATH.svg"},

["Hoàng Anh Gia Lai"] = {rank = 9, full = "Câu lạc bộ bóng đá Hoàng Anh Gia Lai", logo = "Hoàng Anh Gia Lai FC.png"},
["Gia Lai"] = {rank = 9, full = "Câu lạc bộ bóng đá Hoàng Anh Gia Lai", logo = "Hoàng Anh Gia Lai FC.png"},
["HAGL"] = {rank = 9, full = "Câu lạc bộ bóng đá Hoàng Anh Gia Lai", logo = "Hoàng Anh Gia Lai FC.png"},

["TP Hồ Chí Minh"] = {rank = 10, full = "Câu lạc bộ bóng đá TP Hồ Chí Minh", logo = "Logo CLB TPHCM.svg"},
["TPHCM"] = {rank = 10, full = "Câu lạc bộ bóng đá TP Hồ Chí Minh", logo = "Logo CLB TPHCM.svg"},

["Sông Lam Nghệ An"] = {rank = 11, full = "Câu lạc bộ bóng đá Sông Lam Nghệ An", logo = "SLNA FC 2022.svg"},
["Nghệ An"] = {rank = 11, full = "Câu lạc bộ bóng đá Sông Lam Nghệ An", logo = "SLNA FC 2022.svg"},
["SLNA"] = {rank = 11, full = "Câu lạc bộ bóng đá Sông Lam Nghệ An", logo = "SLNA FC 2022.svg"},

["Quảng Nam"] = {rank = 12, full = "Câu lạc bộ bóng đá Quảng Nam", logo = "Quảng Nam FC.svg"},
["QN"] = {rank = 12, full = "Câu lạc bộ bóng đá Quảng Nam", logo = "Quảng Nam FC.svg"},

["SHB Đà Nẵng"] = {rank = 13, full = "Câu lạc bộ bóng đá SHB Đà Nẵng", logo = "Logo CLB SHB Đà Nẵng 3 sao.svg"},
["SHB ĐN"] = {rank = 13, full = "Câu lạc bộ bóng đá SHB Đà Nẵng FC", logo = "Logo CLB SHB Đà Nẵng 3 sao.svg"},
["Đà Nẵng"] = {rank = 13, full = "Câu lạc bộ bóng đá SHB Đà Nẵng FC", logo = "Logo CLB SHB Đà Nẵng 3 sao.svg"},

["Quy Nhơn Bình Định"] = {rank = 14, full = "Câu lạc bộ bóng đá Quy Nhơn Bình Định", logo = "Binh Dinh FC logo.svg"},
["QNBĐ"] = {rank = 14, full = "Câu lạc bộ bóng đá Quy Nhơn Bình Định", logo = "Binh Dinh FC logo.svg"},
}

-- Hàm tạo dòng hiển thị thông tin đội với logo và màu cho hạng
local function renderClubLine(name, data)
local colorMap = {
[1] = "ffde05", -- vàng
[2] = "b3b1b1", -- xám
[3] = "saddlebrown", -- nâu
[4] = "dodgerblue", -- xanh dương
}
local color = colorMap[data.rank] or "000000"
return string.format(
" %s (Hạng %d) (V.League 1 2025)",
data.logo, data.full, color, data.rank
)
end

-- Hàm chính được gọi từ trang Wiki
function p.main(frame)
local key = frame.args[1] or ""
if key ~= "" then
local data = rankmap[key]
if data then
return renderClubLine(key, data)
else
return "Không có đội nào có tên như vậy. Bạn vui lòng kiểm tra lại tên đội bóng."
end
end

local html = mw.html.create("table")
html
:addClass("wikitable")
:addClass("sortable")
:css("text-align", "center")
:tag("tr")
:tag("th"):wikitext("VT"):done()
:tag("th"):wikitext("Đội"):done()
:tag("th"):wikitext("ST"):done()
:tag("th"):wikitext("T"):done()
:tag("th"):wikitext("H"):done()
:tag("th"):wikitext("B"):done()
:tag("th"):wikitext("BT"):done()
:tag("th"):wikitext("BB"):done()
:tag("th"):wikitext("HS"):done()
:tag("th"):wikitext("Đ"):done()
:tag("th"):attr("colspan","2"):wikitext("Ghi chú"):done()
:done()

-- viết từng hàng thủ công
html:tag("tr")
:css("background-color","bfffbf")
:tag("td"):wikitext("1"):done()
:tag("td"):wikitext("Thép Xanh Nam Định FC (C, Q)"):done()
:tag("td"):wikitext("26"):done()
:tag("td"):wikitext("17"):done()
:tag("td"):wikitext("6"):done()
:tag("td"):wikitext("3"):done()
:tag("td"):wikitext("51"):done()
:tag("td"):wikitext("18"):done()
:tag("td"):wikitext("+33"):done()
:tag("td"):wikitext("57"):done()
:tag("td"):attr("colspan","2"):wikitext("Vòng bảng AFC Champions League Two 2025–26 và vòng bảng ASEAN Club Championship 2025–26"):done()
:done()

html:tag("tr")
:css("background-color","ffffff")
:tag("td"):wikitext("2"):done()
:tag("td"):wikitext("Hà Nội"):done()
:tag("td"):wikitext("26"):done()
:tag("td"):wikitext("14"):done()
:tag("td"):wikitext("7"):done()
:tag("td"):wikitext("5"):done()
:tag("td"):wikitext("46"):done()
:tag("td"):wikitext("25"):done()
:tag("td"):wikitext("+21"):done()
:tag("td"):wikitext("49"):done()
:tag("td"):attr("colspan","2"):wikitext(""):done()
:done()

html:tag("tr")
:css("background-color","bfffbf")
:tag("td"):wikitext("3"):done()
:tag("td"):wikitext("Công an Hà Nội (Q)"):done()
:tag("td"):wikitext("26"):done()
:tag("td"):wikitext("13"):done()
:tag("td"):wikitext("6"):done()
:tag("td"):wikitext("7"):done()
:tag("td"):wikitext("43"):done()
:tag("td"):wikitext("30"):done()
:tag("td"):wikitext("+13"):done()
:tag("td"):wikitext("45"):done()
:tag("td"):attr("colspan","2"):wikitext("Vòng bảng AFC Champions League Two 2025–26 và vòng bảng ASEAN Club Championship 2025–26"):done()
:done()

html:tag("tr")
:css("background-color","ffffff")
:tag("td"):wikitext("4"):done()
:tag("td"):wikitext("Thể Công - Viettel"):done()
:tag("td"):wikitext("26"):done()
:tag("td"):wikitext("12"):done()
:tag("td"):wikitext("8"):done()
:tag("td"):wikitext("6"):done()
:tag("td"):wikitext("43"):done()
:tag("td"):wikitext("29"):done()
:tag("td"):wikitext("+14"):done()
:tag("td"):wikitext("44"):done()
:tag("td"):attr("colspan","2"):wikitext(""):done()
:done()

html:tag("tr")
:css("background-color","ffffff")
:tag("td"):wikitext("5"):done()
:tag("td"):wikitext("Hồng Lĩnh Hà Tĩnh"):done()
:tag("td"):wikitext("26"):done()
:tag("td"):wikitext("11"):done()
:tag("td"):wikitext("7"):done()
:tag("td"):wikitext("8"):done()
:tag("td"):wikitext("39"):done()
:tag("td"):wikitext("31"):done()
:tag("td"):wikitext("+8"):done()
:tag("td"):wikitext("40"):done()
:tag("td"):attr("colspan","2"):wikitext(""):done()
:done()

html:tag("tr")
:css("background-color","ffffff")
:tag("td"):wikitext("6"):done()
:tag("td"):wikitext("Hải Phòng"):done()
:tag("td"):wikitext("26"):done()
:tag("td"):wikitext("10"):done()
:tag("td"):wikitext("6"):done()
:tag("td"):wikitext("10"):done()
:tag("td"):wikitext("35"):done()
:tag("td"):wikitext("33"):done()
:tag("td"):wikitext("+2"):done()
:tag("td"):wikitext("36"):done()
:tag("td"):attr("colspan","2"):wikitext(""):done()
:done()

html:tag("tr")
:css("background-color","ffffff")
:tag("td"):wikitext("7"):done()
:tag("td"):wikitext("Becamex Bình Dương"):done()
:tag("td"):wikitext("26"):done()
:tag("td"):wikitext("9"):done()
:tag("td"):wikitext("7"):done()
:tag("td"):wikitext("10"):done()
:tag("td"):wikitext("33"):done()
:tag("td"):wikitext("34"):done()
:tag("td"):wikitext("-1"):done()
:tag("td"):wikitext("34"):done()
:tag("td"):attr("colspan","2"):wikitext(""):done()
:done()

html:tag("tr")
:css("background-color","ffffff")
:tag("td"):wikitext("8"):done()
:tag("td"):wikitext("Thanh Hóa"):done()
:tag("td"):wikitext("26"):done()
:tag("td"):wikitext("8"):done()
:tag("td"):wikitext("7"):done()
:tag("td"):wikitext("11"):done()
:tag("td"):wikitext("30"):done()
:tag("td"):wikitext("34"):done()
:tag("td"):wikitext("-4"):done()
:tag("td"):wikitext("31"):done()
:tag("td"):attr("colspan","2"):wikitext(""):done()
:done()

html:tag("tr")
:css("background-color","ffffff")
:tag("td"):wikitext("9"):done()
:tag("td"):wikitext("Hoàng Anh Gia Lai"):done()
:tag("td"):wikitext("26"):done()
:tag("td"):wikitext("8"):done()
:tag("td"):wikitext("6"):done()
:tag("td"):wikitext("12"):done()
:tag("td"):wikitext("28"):done()
:tag("td"):wikitext("37"):done()
:tag("td"):wikitext("-9"):done()
:tag("td"):wikitext("30"):done()
:tag("td"):attr("colspan","2"):wikitext(""):done()
:done()

html:tag("tr")
:css("background-color","ffffff")
:tag("td"):wikitext("10"):done()
:tag("td"):wikitext("TP Hồ Chí Minh"):done()
:tag("td"):wikitext("26"):done()
:tag("td"):wikitext("7"):done()
:tag("td"):wikitext("7"):done()
:tag("td"):wikitext("12"):done()
:tag("td"):wikitext("27"):done()
:tag("td"):wikitext("39"):done()
:tag("td"):wikitext("-12"):done()
:tag("td"):wikitext("28"):done()
:tag("td"):attr("colspan","2"):wikitext(""):done()
:done()

html:tag("tr")
:css("background-color","ffffff")
:tag("td"):wikitext("11"):done()
:tag("td"):wikitext("Sông Lam Nghệ An"):done()
:tag("td"):wikitext("26"):done()
:tag("td"):wikitext("6"):done()
:tag("td"):wikitext("8"):done()
:tag("td"):wikitext("12"):done()
:tag("td"):wikitext("26"):done()
:tag("td"):wikitext("38"):done()
:tag("td"):wikitext("-12"):done()
:tag("td"):wikitext("26"):done()
:tag("td"):attr("colspan","2"):wikitext(""):done()
:done()

html:tag("tr")
:css("background-color","ffffff")
:tag("td"):wikitext("12"):done()
:tag("td"):wikitext("Quảng Nam"):done()
:tag("td"):wikitext("26"):done()
:tag("td"):wikitext("6"):done()
:tag("td"):wikitext("7"):done()
:tag("td"):wikitext("13"):done()
:tag("td"):wikitext("25"):done()
:tag("td"):wikitext("41"):done()
:tag("td"):wikitext("-16"):done()
:tag("td"):wikitext("25"):done()
:tag("td"):attr("colspan","2"):wikitext(""):done()
:done()

html:tag("tr")
:css("background-color","ffcccc")
:tag("td"):wikitext("13"):done()
:tag("td"):wikitext("SHB Đà Nẵng (O)"):done()
:tag("td"):wikitext("26"):done()
:tag("td"):wikitext("5"):done()
:tag("td"):wikitext("8"):done()
:tag("td"):wikitext("13"):done()
:tag("td"):wikitext("24"):done()
:tag("td"):wikitext("42"):done()
:tag("td"):wikitext("-18"):done()
:tag("td"):wikitext("23"):done()
:tag("td"):attr("colspan","2"):wikitext("Tham dự play-off"):done()
:done()

html:tag("tr")
:css("background-color","ffcccc")
:tag("td"):wikitext("14"):done()
:tag("td"):wikitext("Quy Nhơn Bình Định (R)"):done()
:tag("td"):wikitext("26"):done()
:tag("td"):wikitext("5"):done()
:tag("td"):wikitext("6"):done()
:tag("td"):wikitext("15"):done()
:tag("td"):wikitext("23"):done()
:tag("td"):wikitext("46"):done()
:tag("td"):wikitext("-23"):done()
:tag("td"):wikitext("21"):done()
:tag("td"):attr("colspan","2"):wikitext("Xuống hạng V.League 2 2025–26"):done()
:done()

html:tag("tr")
:tag("td"):attr("colspan","12")
:css("text-align","left")
:wikitext("Nguồn: VPF.Quy tắc xếp hạng: 1) Điểm; 2) Kết quả đối đầu; 3) Hiệu số bàn thắng thua; 4) Số bàn thắng; 5) Số bàn thắng sân khách; 6) Điểm thẻ phạt (thẻ vàng = –1 điểm, thẻ đỏ gián tiếp = –3 điểm, thẻ đỏ trực tiếp = –3 điểm, thẻ vàng và thẻ đỏ trực tiếp = –4 điểm); 7) Play-off (nếu tranh huy chương hoặc xuống hạng); 8) Bốc thăm.")

:wikitext("(C) Vô địch; (O) Thắng play-off; (Q) Giành quyền tham dự giai đoạn được chỉ định; (R) Xuống hạng")
:done()

return tostring(html)
end

return p