require "dialog"
require "preferenceGUI\\locals"

local width = 360
local height = 170
local ffont="Arial"
local fpoint=10

local folder=GetFolder(ProfileFolder)

local fname=folder.."\\adblockplus\\patterns.ini"

local d = create_dialog({
	width = width,
	height = height,
	caption = "Adblock+",
	style = w32dlg.DS_CENTER,
	font = ffont, point = fpoint,
	{type="combobox",style=w32dlg.WS_BORDER+w32dlg.WS_VSCROLL+w32dlg.WS_HSCROLL+w32dlg.CBS_SIMPLE,height=130,width=280,x=5,y=5,id="IDadblock",},
	{type="button",style=w32dlg.BS_DEFPUSHBUTTON,x=300,y=5,width=50,height=12,id="IDADDBUTTON",caption=_ADADD}, 
	{type="button",style=w32dlg.BS_DEFPUSHBUTTON,x=300,y=25,width=50,height=12,id="IDREMOVEBUTTON",caption=_ADREMOVE},
	{type="button",style=w32dlg.BS_DEFPUSHBUTTON,x=300,y=45,width=50,height=12,id="IDLOADBUTTON",caption="Load Filter"}, 
	{type="button",style=w32dlg.BS_DEFPUSHBUTTON,x=300,y=65,width=50,height=12,id="IDSORTBUTTON",caption="Sort Filter"}, 
	{type="button",style=w32dlg.BS_DEFPUSHBUTTON,x=5,y=135,width=40,height=12,id="IDOK",caption="Done"},   	
})

--[[local d = {

	{
		width = width,
		height = height,
		caption = _FILTERRULE,
		style = w32dlg.DS_CENTER, -- style 
		font = ffont, point = fpoint, -- font 
		{
			type = "combobox",  
			style = w32dlg.WS_BORDER +
			        w32dlg.WS_VSCROLL + w32dlg.WS_HSCROLL +
			        w32dlg.CBS_SIMPLE,
			height=130,
			width=280,			
			x = 5,  
			y = 5,  
			id = "IDadblock",  
		},  
		{type="button",style=w32dlg.BS_DEFPUSHBUTTON,x=300,y=5,width=80,height=15,id="IDADDBUTTON",caption=_ADADD}, 
		{type="button",style=w32dlg.BS_DEFPUSHBUTTON,x=300,y=25,width=80,height=15,id="IDREMOVEBUTTON",caption=_ADREMOVE},
		{type="button",style=w32dlg.BS_DEFPUSHBUTTON,x=300,y=45,width=80,height=15,id="IDLOADBUTTON",caption="Load Filter"},              
	},

	{
		width = width,
		height = height,
		caption = _WHITELIST,
		style = w32dlg.DS_CENTER, -- style 
		font = ffont, point = fpoint, -- font 
		{
			type = "combobox",  
			style = w32dlg.WS_BORDER +
			        w32dlg.WS_VSCROLL + w32dlg.WS_HSCROLL +
			        w32dlg.CBS_SIMPLE,
			height=130,
			width=280,			
			x = 5,  
			y = 5,  
			id = "IDwhite",  
		}, 
		{type="button",style=w32dlg.BS_RADIOBUTTON+w32dlg.WS_GROUP,x=300,y=5,width=80,height=10,id="IDRADIO1",caption="add"}, 
		{type="button",style=w32dlg.BS_RADIOBUTTON,x=300,y=15,width=80,height=10,id="IDRADIO2",caption="remove"},
		{type="button",style=w32dlg.BS_RADIOBUTTON,x=300,y=25,width=80,height=10,id="IDRADIO3",caption="keep"},              
	},

} --]]

local function refresh(hwnd)
	 km.NavigateTo("abp://",OPEN_NORMAL)
end

--[[ local function readfile()
	--local f = assert(io.open(fname))
	--local patterns = f:read("*all")
	--local p=string.find(patterns,"[User patterns]")
	--patterns=string.sub(patterns,p)	
	--f:write(patterns)
	--f:close()
	io.input(fname)
	local g={}
	for line in io.lines() do
		if string.find(line,"[Pattern]") or string.find(line,"text=") or string.find(line,"type=") or string.find(line,"regexp=") or string.find(line,"shortcut=") or string.find(line,"disabled=") or string.find(line,"domain=") or string.find(line,"selector=") or string.len(line)<2 then
		else
			table.insert(g,line)
		end
	end
	return g
end --]]

local function readfile()
	local f = assert(io.open(fname,"r"))
	local patterns = f:read("*all")
	local patterns_backup=""
	local ad
	f:close()	
	local g={}
	local w={}
	local p=string.find(patterns,"User patterns")
	patterns_backup=string.sub(patterns,1,p+14)
	patterns=string.sub(patterns,p+14)	
	--alert(patterns)
	--alert(patterns_backup)
	local i=1
	local j=1
	while(string.find(patterns,"\n")) do
		p=string.find(patterns,"\n")
		patterns=string.sub(patterns,p+1)
		p=string.find(patterns,"\n")
		if (p) then
			ad=string.sub(patterns,1,p-1)
			--g[i]=string.sub(patterns,1,p-1)
			if (string.len(ad)>1) then
				--if (string.find(ad,"@@")) then
					--w[j]=ad
					--j=j+1
				--if (string.find(ad,"!")==nil) then
				--else
					g[i]=ad
					i=i+1
				--end
			end			
		--else
			--p=string.find(patterns,"\n")
			--g[i]=string.sub(patterns,1,p-1)
			--i=i+1
		end
	end
	--alert(i)
	return g,patterns_backup
end 

local function write_list(g,patterns_backup)
	local patterns=""
	for i,v in ipairs(g) do
		--patterns=patterns.."|"..g[i].."\n"
		patterns=patterns..g[i].."\n"
	end
	--for j,v in ipairs(w) do
	--	patterns=patterns..w[j].."\n"
	--end
	patterns=patterns.."\n"
	patterns=patterns_backup..patterns
	--alert(patterns)
	local f=assert(io.open(fname,"w"))
	if f then
		--alert("ok")
		f:write(patterns)
		f:close()
		refresh()
	end
	
end

--[[ local function write_list(g)
	f = assert(io.open(fname,"w+"))
	f:write("[User patterns]\n")
	for i,v in ipairs(g) do
		f:write(g[i].."\n")
	end
	f:close()
	refresh()
end --]]
		

--[[local function addlist(line)
	f = assert(io.open(fname,"a"))
	f:write(line,'\n')
	f:close()
	refresh()
end--]]
	

--local p = create_propertysheet(d)

function property_adblockplus()
	local g,patterns_backup=readfile()
	--alert(patterns_backup)
	r,rr=d("Adblock plus",{
		IDadblock={nil,g},	
		--{IDwhite={nil,w},IDRADIO3=1},	
	})
	
	if r=="IDADDBUTTON" then 
		local n=rr.IDadblock
		local found=false
		for h,v in ipairs(g) do
			if g[h]==n then found=true end
		end
		if (found==false) then
			table.insert(g,n)
			write_list(g,patterns_backup)
			--refresh(hwnd)
			--addlist(n)
		else
			alert("Filter rule already existed!","Adblock plus", ICON_INFO)
		end
		property_adblockplus()
	end
	
	if r=="IDREMOVEBUTTON" then
		local n=rr.IDadblock
		for h,v in ipairs(g) do
			if g[h]==n then
				--alert(g[h])
				table.remove(g,h)
				write_list(g,patterns_backup)
			end
		end
		property_adblockplus()
	end
	
	if r=="IDLOADBUTTON" then
		importlist()
		property_adblockplus()
	end
	
	if r=="IDSORTBUTTON" then
		sortlist()
		property_adblockplus()
	end
	
	--alert(rr.IDADDBUTTON)
	--alert(r)
	
	--local n=rr[1].IDadblock
	--local m=rr[2].IDwhite
	--[[ if rr[1].IDRADIO1==1 then
		table.insert(g,n)
		--alert(n)
		write_list(g,w,patterns_backup)
		refresh(hwnd)
 	elseif rr[1].IDRADIO2==1 then
		for h,v in ipairs(g) do
			if g[h]==n then
				table.remove(g,h)
				write_list(g,w,patterns_backup)
				refresh(hwnd)
			end
		end
	end
	if rr[2].IDRADIO1==1 then
		table.insert(w,m)
		write_list(g,w,patterns_backup)
	elseif rr[2].IDRADIO2==1 then
		for h,v in ipairs(w) do
			if w[h]==m then
				table.remove(w,h)
				write_list(g,w,patterns_backup)
				refresh(hwnd)
			end
		end
	end --]]
end

function addpattern(hwnd)
	local g,patterns_backup = readfile()
	local url1=GetGlobalVar(TYPE_STRING, "ImageURL")
	local found=false
	if url1 then
		url1=prompt(_Adblock1,_Adblock2,url1)
		for h,v in ipairs(g) do
			if g[h]==url1 then found=true end
		end
		if found==false then
			--alert(url1)
			table.insert(g,url1)
			write_list(g,patterns_backup)
			--addlist(url1)
			--refresh(hwnd)
		else
			alert("Filter rule already existed!","Adblock plus", ICON_INFO)
		end
	end
end

function addpattern2(hwnd)
	local g,patterns_backup = readfile()
	local url1=GetGlobalVar(TYPE_STRING, "FrameURL")
	local found=false
	if url1 then
		url1=prompt(_Adblock3,_Adblock4,url1)
		for h,v in ipairs(g) do
			if g[h]==url1 then found=true end
		end
		if found==false then
			table.insert(g,url1)
			write_list(g,patterns_backup)
			--addlist(url1)
			--refresh(hwnd)
		else
			alert("Filter rule already existed!","Adblock plus", ICON_INFO)
		end
	end
end

function importlist()
	local listfname,ofn = GetOpenFileName(hwnd)
	if (listfname) then
	io.input(listfname)
	f = assert(io.open(fname,"a"))
	local count=0
	local found=false
	if string.find(io.read(),"Adblock") then
	for line in io.lines() do
		if string.find(line,"Adblock") or string.find(line,"!") or string.len(line)<2 then		
		else		
			f:write(line,'\n')
			count=count+1			
		end
	end
	f:close()
	alert(count.." filter added","Adblock plus", ICON_INFO)
	refresh()
	end
	end
end

function sortlist()
	local g,patterns_backup=readfile()
	table.sort(g)
	write_list(g,patterns_backup)
end
