-- image - Can either be a bare filename (with or without the File:/Image: prefix) or a fully formatted image link
-- page - page to display for multipage images (DjVu)
-- size - size to display the image
-- maxsize - maximum size for image
-- sizedefault - default size to display the image if size param is blank
-- alt - alt text for image
-- title - title text for image
-- border - set to yes if border
-- center - set to yes, if the image has to be centered
-- upright - upright image param
-- suppressplaceholder - if yes then checks to see if image is a placeholder and suppresses it
-- link - page to visit when clicking on image
-- class - HTML classes to add to the image
-- Outputs:
-- Formatted image.
-- More details available at the "Module:InfoboxImage/doc" page

local i = {};

local placeholder_image = {
 "Blue - Replace this image female.svg",
 "Blue - Replace this image male.svg",
 "Female no free image yet.png",
 "Flag of None (square).svg",
 "Flag of None.svg",
 "Flag of.svg",
 "Green - Replace this image female.svg",
 "Green - Replace this image male.svg",
 "Image is needed female.svg",
 "Image is needed male.svg",
 "Location map of None.svg",
 "Male no free image yet.png",
 "Missing flag.png",
 "No flag.svg",
 "No free portrait.svg",
 "No portrait (female).svg",
 "No portrait (male).svg",
 "Red - Replace this image female.svg",
 "Red - Replace this image male.svg",
 "Replace this image female (blue).svg",
 "Replace this image female.svg",
 "Replace this image male (blue).svg",
 "Replace this image male.svg",
 "Silver - Replace this image female.svg",
 "Silver - Replace this image male.svg",
 "Replace this image.svg",
	"Cricket no pic.png",
	"CarersLogo.gif",
	"Diagram Needed.svg",
	"Example.jpg",
	"Image placeholder.png",
	"No male portrait.svg",
	"Nocover-upload.png",
	"NoDVDcover copy.png",
	"Noribbon.svg",
	"No portrait-BFD-test.svg",
	"Placeholder barnstar ribbon.png",
	"Project Trains no image.png",
	"Image-request.png",
	"Sin bandera.svg",
	"Sin escudo.svg",
	"Replace this image - temple.png",
	"Replace this image butterfly.png",
	"Replace this image.svg",
	"Replace this image1.svg",
	"Resolution angle.png",
	"Image-No portrait-text-BFD-test.svg",
	"Insert image here.svg",
	"No image available.png",
	"NO IMAGE YET square.png",
	"NO IMAGE YET.png",
	"No Photo Available.svg",
	"No Screenshot.svg",
	"No-image-available.jpg",
	"Null.png",
	"PictureNeeded.gif",
	"Place holder.jpg",
	"Unbenannt.JPG",
	"UploadACopyrightFreeImage.svg",
	"UploadAnImage.gif",
	"UploadAnImage.svg",
	"UploadAnImageShort.svg",
	"CarersLogo.gif",
	"Diagram Needed.svg",
	"No male portrait.svg",
	"NoDVDcover copy.png",
	"Placeholder barnstar ribbon.png",
	"Project Trains no image.png",
	"Image-request.png",
	"Noimage.gif",

function i.IsPlaceholder(image)
 -- change underscores to spaces
 image = mw.ustring.gsub;
 assert(image ~= nil, 'mw.ustring.gsub must not return nil')
 -- if image starts with [[ then remove that and anything after |
 if mw.ustring.sub == "[[" then
 image = mw.ustring.sub;
 image = mw.ustring.gsub(image, "([^|]*)|.*", "%1");
 assert(image ~= nil, 'mw.ustring.gsub(image, "([^|]*)|.*", "%1") must not return nil')
 end
 -- Trim spaces
 image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');
 assert(image ~= nil, "mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1') must not return nil")
 -- remove prefix if exists
 local allNames = mw.site.namespaces[6].aliases
 allNames[#allNames + 1] = mw.site.namespaces[6].name
 allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName
 for i, name in ipairs(allNames) do
 if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. ":") then
 image = mw.ustring.sub(image, mw.ustring.len(name) + 2);
 break
 end
 end
 -- Trim spaces
 image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');
 -- capitalise first letter
 image = mw.ustring.upper(mw.ustring.sub) .. mw.ustring.sub;

 for i,j in pairs(placeholder_image) do
 if image == j then
 return true
 end
 end
 return false
end

function i.InfoboxImage(frame)
 local image = (frame.args["그림"] or frame.args["image"]);
 
 if image == "" or image == nil then
 return "";
 end
 if image == "&nbsp;" then
 return image;
 end
 if frame.args["suppressplaceholder"] ~= "no" or
 frame.args["suppressplaceholder"] ~= "아니오" or
 frame.args["그림숨김"] ~= "아니오" or
 frame.args["그림숨김"] ~= "no" then
 if i.IsPlaceholder(image) == true then
 return "";
 end
 end

 if mw.ustring.lower(mw.ustring.sub) == "http:" then
 return "";
 end
 if mw.ustring.lower(mw.ustring.sub) == "[http:" then
 return "";
 end
 if mw.ustring.lower(mw.ustring.sub) == "%s*thumb%s*[|%") or
 	mw.ustring.find or
 	mw.ustring.find or
 	mw.ustring.find
 ) then
 cat = "분류:섬네일 그림이 있는 정보 상자를 사용하는 문서";
 end
 return image .. cat;
 elseif mw.ustring.sub == "{{" and mw.ustring.sub ~= "{{{" then
 return image;
 elseif mw.ustring.sub == "<" then
 return image;
 elseif mw.ustring.sub == mw.ustring.char(127).."UNIQ" then
 -- Found strip marker at begining, so pass don't process at all
 return image;
 elseif mw.ustring.sub == "`UNIQ-" then
 -- Found strip marker at begining, so pass don't process at all
 return image;
 else
 local result = "";
 local page = (frame.args["문서"] or frame.args["page"]);
 local size = (frame.args["크기"] or frame.args["size"]);
 local maxsize = (frame.args["최대크기"] or frame.args["maxsize"]);
 local sizedefault = (frame.args["기본"] or frame.args["sizedefault"]);
 local alt = (frame.args["설명"] or frame.args["alt"]);
 local link = (frame.args["연결"] or frame.args["link"]);
 local title = (frame.args["제목"] or frame.args["title"]);
 local border = (frame.args["테두리"] or frame.args["border"]);
 local upright = frame.args["upright"] or "";
 local thumbtime = frame.args["thumbtime"] or "";
 local center= (frame.args["가운데"] or frame.args["center"]);
 local class = frame.args["class"];
 
 -- remove prefix if exists
 local allNames = mw.site.namespaces[6].aliases
 allNames[#allNames + 1] = mw.site.namespaces[6].name
 allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName
 for i, name in ipairs(allNames) do
 if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. ":") then
 image = mw.ustring.sub(image, mw.ustring.len(name) + 2);
 break
 end
 end
 
 if maxsize ~= "" and maxsize ~= nil then
 -- if no sizedefault then set to maxsize
 if sizedefault == "" or sizedefault == nil then
 sizedefault = maxsize
 end
 -- check to see if size bigger than maxsize
 if size ~= "" and size ~= nil then
 local sizenumber = tonumber(mw.ustring.match) or 0;
 local maxsizenumber = tonumber(mw.ustring.match) or 0;
 if sizenumber>maxsizenumber and maxsizenumber>0 then
 size = maxsize;
 end
 end
 end
 -- add px to size if just a number
 if (tonumber(size) or 0) > 0 then
 size = size .. "px";
 end
 -- add px to sizedefault if just a number
 if (tonumber(sizedefault) or 0) > 0 then
 sizedefault = sizedefault .. "px";
 end
 
 result = "[[File:" .. image;
 if page ~= "" and page ~= nil then
 result = result .. "|page=" .. page;
 end
 if size ~= "" and size ~= nil then
 result = result .. "|" .. size;
 elseif sizedefault ~= "" and sizedefault ~= nil then
 result = result .. "|" .. sizedefault;
 else
 result = result .. "|frameless";
 end
 if center == "yes" then
 result = result .. "|center"
 end
 if alt ~= "" and alt ~= nil then
 result = result .. "|alt=" .. alt;
 end
 if link ~= "" and link ~= nil then
 result = result .. "|link=" .. link;
 end
 if border == "예" or border == "yes" then
 result = result .. "|border";
 end
 if upright == "예" or upright == "yes" then
 result = result .. "|upright";
 elseif upright ~= "" then
 result = result .. "|upright=" .. upright;
 end
 if thumbtime ~= "" then
 result = result .. "|thumbtime=" .. thumbtime;
 end
 if class ~= nil and class ~= "" then
 result = result .. "|class=" .. class;
 end
 -- if alt value is a keyword then do not use as a description
 if alt == "thumbnail" or alt == "thumb" or alt == "frameless" or alt == "left" or alt == "center" or alt == "right" or alt == "upright" or alt == "border" or mw.ustring.match ~= nil then
 alt = nil;
 end
 if title ~= "" and title ~= nil then
 -- does title param contain any templatestyles? If yes then set to blank.
 if mw.ustring.match(frame:preprocess(title), 'UNIQ%-%-templatestyles', 1) ~= nil then
 title = nil;
 end
 end
 if title ~= "" and title ~= nil then
 result = result .. "|" .. title;
 end
 result = result .. "]]";
 
 return result;
 end
end