local p = {}
local c = require("Module:Common")

function p.daten(frame, args)
	local title = mw.title.getCurrentTitle().text
	local extension = p.getExtension(title)
	local filekind = p.getFilekind(extension)
	local a, w, z
	
	local t = '<table class="wikitable">' ..
		'<th colspan="4">' .. title .. '</th>'
	
	if not c.isEmpty(args.Genre) then
		t = t .. '<tr>'..
			'<td>[[Attribut:Genre|Genre]]</td>' ..
			'<td colspan="3">'..frame:callParserFunction(
				'#arraymap', args.Genre, ';', 'x', '[[:Kategorie:x|x]] [[Kategorie:x]]') .. '</td>' ..
		'</tr>'
	end
	
	-- Liste Freiattribute und Werte auf
	for i = 1, 6 do
		a = 'Attribut'..i
		w = 'Wert'..i
		if not c.isEmpty(args[a]) then
			t=t..'<tr>'..
				'<td>[[Attribut:'..args[a]..'|'..args[a]..']]</td>'..
				'<td colspan="3">'..frame:callParserFunction(
					'#arraymap', args[w], ';', 'x', '[['..args[a]..'::x]]')..'</td>'..
			'</tr>'
		end
	end
	
	if not c.isEmpty(args.Urheber) then
		t = t .. '<tr>'..
			'<td>[[Attribut:Urheber|Urheber]]</td>' ..
			'<td colspan="3">'..frame:callParserFunction(
				'#arraymap', args['Urheber'], ';', 'x', '[[Urheber::x]]')..
			'</td>'..
		'</tr>'
	end
	
	if not c.isEmpty(args.Quellangaben) then
		t = t .. '<tr>'..
		    '<td>[[Attribut:Quellangaben|Quellangaben]]</td>'..
		    '<td colspan="3">[[Quellangaben::'..args.Quellangaben..']]</td>'..
		'</tr>'
	end
	
	if not c.isEmpty(args.Ort) then
		t = t .. '<tr>'..
			'<td>[[Attribut:Ort|Ort]]</td>'..
			'<td>' .. frame:callParserFunction(
				'#arraymap', args.Ort, ';', 'x', '[[Ort::x]]') ..'</td>'..
			'<td><b>ausblenden:</b></td>'
		z = '<td>[[ZeigeNichtInOrt::Nein]]</td>'
		if not c.isEmpty(args.ZeigeNichtInOrt) then
			z = '<td>[[ZeigeNichtInOrt::'..args.ZeigeNichtInOrt..']]</td>'
		end
		t = t .. z ..'</tr>'
	end
	
	if not c.isEmpty(args['Straße']) then
		t = t .. '<tr>' ..
			'<td>[[Attribut:Straße|Straße]]</td>' ..
			'<td>' .. frame:callParserFunction(
				'#arraymap', args['Straße'], ';', 'x', '[[Straße::x]]') 
		t = t .. '</td>' ..
			'<td><b>ausblenden:</b></td>'
		z = '<td>[[ZeigeNichtInStraße::Nein]]</td>'
		if not c.isEmpty(args['ZeigeNichtInStraße']) then
			z = '<td>[[ZeigeNichtInStraße::'..args['ZeigeNichtInStraße']..']]</td>'
		end
		t = t .. z .. '</tr>'
	end
	
	if not c.isEmpty(args.Erstellungsdatum) then
		t = t .. '<tr>' ..
			'<td>[[Attribut:Erstellungsdatum|Erstellungsdatum]]</td>' ..
			'<td colspan="3">' .. frame:expandTemplate{title='LinkFormDatum', args={
				args.Erstellungsdatum,
				'Erstellungsdatum',
				'Erstellungstag',
				'Erstellungsjahr'}} .. '</td>' ..
		'</tr>'
	end
	
	if not c.isEmpty(args['ÜberDatum']) then
		t=t..'<tr>'..
			'<td>[[Attribut:ÜberDatum|Über Datum]]</td>'..
			'<td colspan="3">'..frame:expandTemplate{title='LinkFormDatum', args={
				args['ÜberDatum'],
				'ÜberDatum',
				'ÜberTag',
				'ÜberJahr'}}..'</td>'..
		'</tr>'
	end
	
	if not c.isEmpty(args.Seitennummer) then
		t=t..'<tr>'..
			'<td>[[Attribut:Seitennummer|Seitennummer]]</td>'..
			'<td colspan="3">'..frame:callParserFunction(
				'#arraymap', args.Seitennummer, ';', 'x', '[[Seitennummer::x]]') ..'</td>'..
		'</tr>'
	end
	
	if not c.isEmpty(args.Signatur) then
		t=t..'<tr>'..
			'<td>[[Attribut:Signatur|Signatur]]</td>'..
			'<td colspan="3">[[Signatur::'..args.Signatur..']]</td>'..
		'</tr>'
	end
	
	if not c.isEmpty(extension) then
		t=t..'<tr>'..
			'<td>[[Attribut:Dateityp|Dateityp]]</td>'..
			'<td>[[Dateityp::' .. extension .. ']]</td>'..
			'<td>[[Attribut:Dateiart|Dateiart]]</td>'..
			'<td>[[Dateiart::' .. filekind .. ']]</td>'..
		'</tr>'
	end 
	
    if not c.isEmpty(args['Länge']) then
		t=t..'<tr>'..
			'<td>[[Attribut:Länge|Länge]]</td>'..
			'<td colspan="3">'..'[[Länge::'..args['Länge']..']]</td>'..
		'</tr>'
	end

	if not c.isEmpty(args.Lizenz) then
		t=t..'<tr>'..
			'<td>[[Attribut:Lizenz|Lizenz]]</td>'..
			'<td colspan="3">[[Lizenz::' .. args.Lizenz .. ']]</td>'..
		'</tr>'
	end
		
	if not c.isEmpty(args.Beschreibung) then
		t=t..'<tr>'..
			'<td>[[Attribut:Beschreibung|Beschreibung]]</td>'..
			'<td colspan="3">[[Beschreibung::' ..args.Beschreibung .. ']]</td>'..
		'</tr>'
	end
	
	if not c.isEmpty(args.UploadCommons) then
		t=t..'<tr>'..
			'<td>[[Attribut:UploadCommons|Upload zu Wikimedia Commons]]</td>'..
			'<td colspan="3">[[UploadCommons::' .. args.UploadCommons .. ']]</td>'..
		'</tr>'
	end

	t=t..'<tr>'..
		'<td>[[Bild:IconSearch.svg|16px|semantisches Browsen|link=Spezial:Durchsuchen/{{NAMESPACE}}:{{PAGENAME}}]]</td>'..
		'<td colspan="3">[[Spezial:Durchsuchen/{{NAMESPACE}}:{{PAGENAME}}|semantisches Browsen]]</td>'..
	'</tr>'
	t=t..'</table>'
	return t
end 

function p.GetExtension(frame)
	-- #invoke wrapper
	return p.getExtension(frame.args[1])
end

function p.getExtension(filename)
	local extension = filename:match("^.+%.([^%.]+)$")
    return mw.ustring.lower(extension)
end

function p.GetFilekind(frame)
	-- #invoke wrapper
	return p.getFilekind(frame.args[1])
end

function p.getFilekind(filetype)
	local t = {
		["Bild"] = {"webp", "png", "gif", "jpg", "jpeg", "svg"},
		["Dokument"] = {"pdf"},
		["Audio"] = {"mp3", "ogg", "oga", "flac", "opus", "wav"},
		["Midi"] = {"midi", "mid"},
		["Video"] = {"webm", "mp4", "m4v", "ogv", "mpg", "mpeg"},
		["3D-Modell"] = {"obj", "glb", "gltf"},
	}
	for key, values in pairs(t) do
        for _, value in ipairs(values) do
            if value == filetype then
                return key  -- Bricht beide Schleifen ab und gibt den Key zurück
            end
        end
	end
	return ""  -- Gib leeren String zurück, wenn nichts gefunden wurde
end

return p