local string=mw.ustring

function cite(frame)
	local b,c,v,p,s,q,txt,book_id,u
	local args = {}
	local targs = {}

	for k, v in pairs(frame.args) do
		if v ~= "" then args[k] = v end
	end
	for k, v in pairs(frame:getParent().args) do
		if v ~= "" then args[k] = v end
	end

	txt = args[1]
	if string.find(txt,'https://shamela.ws/book/') ~= nil then
		local q,c,u,ch,p
		if 	string.match(txt,'^([^\n]+)\n%-%-%-%-%-%-%-%-\n([^\n]+) %- المكتبة الشاملة\n%-%-%-%-%-%-%-%-\nالرابط:(https://shamela.ws/book/%d+/%d+#p%d+)$') then
			q,c,u = string.match(txt,'^([^\n]+)\n%-%-%-%-%-%-%-%-\n([^\n]+) %- المكتبة الشاملة\n%-%-%-%-%-%-%-%-\nالرابط:(https://shamela.ws/book/%d+/%d+#p%d+)$')
		elseif string.match(txt,'(ص[^\n]+) %- المكتبة الشاملة\n%-%-%-%-%-%-%-%-\nالرابط:(https://shamela.ws/book/%d+/%d+#p%d+)$') then
			c,u = string.match(txt,'(ص[^\n]+) %- المكتبة الشاملة\n%-%-%-%-%-%-%-%-\nالرابط:(https://shamela.ws/book/%d+/%d+#p%d+)$')
		elseif string.match(txt,'(https://shamela.ws/book/%d+/%d+#p%d+)$') or string.match(txt,'(https://shamela.ws/book/%d+)$') then
			u = string.match(txt,'(https://shamela.ws/book/%d+/%d+#p%d+)$') or string.match(txt,'(https://shamela.ws/book/%d+)$')
		else
			error('صيغة غير قياسية')
		end
		
		book_id = string.match(u,'^https://shamela.ws/book/(%d+)$') or string.match(u,'^https://shamela.ws/book/(%d+)/')
		if not book_id then
			return error("تحقق من رابط الموقع")
		else
			book_id=tonumber(book_id)
			if c and string.match(u,'^https://shamela.ws/book/(%d+)/(%d+)') then
				p,ch = string.match(c,'^ص([^\n ]+) %- [^\n]+ %- ([^\n%-]+)$')
				if ch then
					targs['chapter-url'] = u
					targs.chapter = ch
				else
					targs.url= u 
				end
				if p then
					targs.page= p
				end
			else
				targs['url'] = u
			end
			
			if q then
				targs.quote = q
				targs.via = '[[المكتبة الشاملة]]'
			end
		end
	else
		q = string.match(txt,':[%s\n]*«([^%)]+)»$')
		if q then
			targs.quote = q
			targs.via = '[[المكتبة الشاملة]]'
		end
		b,c = string.match(txt,'^([^%(0-9]+) %(([^%)]+)%)')

		if not b then
			return error("صيغة غير قياسية")
		elseif string.sub(b,1,1) == '«' and string.sub(b,-1,-1) == '»' then
			b = mw.text.trim(string.sub(b,2,-2))
		end

		if c then
			if string.match(c,'^ص(%d+)$') then
				p = string.match(c,'^ص(%d+)$')
			elseif string.match(c,'^ص(%d+) ([ء-ي].+)$') then
				p,s = string.match(c,'^ص(%d+) ([ء-ي].+)$')
			elseif string.match(c,'^([^/]+)/ (%d+)$') then
				v,p = string.match(c,'^([^/]+)/ (%d+)$')
			elseif string.match(c,'^([^/]+)/ (%d+) ([ء-ي].+)$') then
				v,p,s = string.match(c,'^([^/]+)/ (%d+) ([ء-ي].+)$')
			else
				return error("صيغة غير قياسية")
			end
			if p then
				targs.page = p
			end
			if v then
				targs.volume = v
			end
		end
		mw.log(txt,b,c,v,p,s,q)
	end
	
	if b or book_id then
		shamela = mw.loadData('Module:Cite Shamela/data')
		if book_id then
			for k,v in pairs(shamela) do
				if v.id == book_id then
					b = v.name
					targs.qid = v.q
					break
				end
			end
		elseif b then

			for k,v in pairs(shamela) do
				if (v.pre or v.name) == b and s == v.suf then
					book_id = v.id
					targs.qid = v.q
					break
				end
			end
		end
	end
	if targs.qid == nil then
		return ('<strong class="error">لم يعثر على بيانات الكتاب في ويكي بيانات</strong>')
	end
	return table.concat ({frame:expandTemplate ({title='استشهاد بويكي بيانات/نسخ', args=targs}), '<!-- إخراج تلقائي من قالب:استشهاد بالشاملة -->'})
	
end



return { 
		cite = cite
}