มอดูล:Infobox television

--- @module
local p = {}
local maintenance_categories = {
	incorrectly_formatted = "%s",
	image_values_without_an_image = "หมวดหมู่:หน้าที่ใช้กล่องข้อมูลรายการโทรทัศน์ที่มีค่าเกี่ยวกับรูปภาพแต่ไม่มีรูปภาพ",
	unnecessary_title_parameter = "หมวดหมู่:หน้าที่ใช้กล่องข้อมูลรายการโทรทัศน์ที่มีพารามิเตอร์ name โดยไม่จำเป็น",
	non_matching_title = "หมวดหมู่:หน้าที่ใช้กล่องข้อมูลรายการโทรทัศน์ที่มีชื่อหัวข้อไม่ตรงกับบทความ",
	flag_icon = "หมวดหมู่:หน้าที่ใช้กล่องข้อมูลรายการโทรทัศน์ที่มีสัญลักษณ์รูปธง",
	dates_incorrectly_formatted = "หมวดหมู่:หน้าที่ใช้กล่องข้อมูลรายการโทรทัศน์ที่มีวันที่ไม่เป็นมาตรฐาน",
	manual_display_title = "หมวดหมู่:หน้าที่ใช้กล่องข้อมูลรายการโทรทัศน์ที่มีชื่อเรื่องแสดงด้วยตนเองโดยไม่จำเป็น",
	manual_display_title_temp_tracking = "หมวดหมู่:หน้าที่ใช้กล่องข้อมูลรายการโทรทัศน์ที่มีชื่อเรื่องแสดงด้วยตนเอง",
}
--- Returns a table consisting of the title's title parts.
---
--- The return table's properties:
--- - title - The title.
--- - disambiguation - the disambiguation text without parentheses.
---
--- Note: could potentially be moved to an outside module for other template and module uses.
---
--- @param text string
--- @return table
local function get_title_parts(text)
	local title, disambiguation = string.match(text, "^(.+) (%b())$")
	if not title or type(title) ~= "string" then
		title = text
	end
	---@type table
	local title_parts = {title = -- nil title, disambiguation = nil}
	if not disambiguation or type(disambiguation) ~= "string" then
		return title_parts
	end
	-- Remove outside parentheses from names which use parentheses as part of the name such as "episode (Randall and Hopkirk (Deceased))".
	disambiguation = string.sub(-- nil disambiguation, 2, -2)
	title_parts.disambiguation = -----@not number disambiguation
	return title_parts
end
--- Returns a maintenance category if the italic_title value is not "no".
---
--- Infobox parameters checked:
--- - |italic_title=
---
--- @param args table
--- @return string
local function is_italic_title_valid_value(args)
	if args.italic_title and args.italic_title ~= "no" then
		return string.format(maintenance_categories.incorrectly_formatted, "Italic title")
	end
	return ""
end
--- Returns a maintenance category if the dates are not formatted correctly with
---  and  templates.
---
--- Infobox parameters checked:
--- - |first_aired=
--- - |released=
--- - |last_aired=
---
--- @param start_date string The start date value.
--- @param end_date string The end date value.
--- @return string
local function are_dates_formatted_correctly(start_date, end_date)
	if start_date and not string.find(start_date, "dtstart") then
		return maintenance_categories.dates_incorrectly_formatted
	end
	if end_date and (not string.find(end_date, "dtend") and end_date ~= "ปัจจุบัน") then
		return maintenance_categories.dates_incorrectly_formatted
	end
	return ""
end
--- Returns a maintenance category if a  or  template is used.
---
--- Testing parameters:
--- - |page_test= - a real Wikipedia page to read the content of the page.
---
--- Infobox parameters checked:
--- - |italic_title=
---
--- @param args table
--- @return string
local function has_display_title(args)
	--TODO: when testing below is done uncomment code
	--if args.italic_title then
	--	return ""
	--end
	local article
	if args.page_test then
		article = mw.title.new(args.page_test)
	else
		article = mw.title.getCurrentTitle()
	end
	local page_text = article:getContent()
	if not page_text then
		return ""
	end
	if string.find(page_text, "