if {![exists -proc class]} { package require oo }
if {![exists -proc sqlite3.open]} { package require sqlite3 }

if {![file exists /mod/etc/webif.db]} {
	set settingsdb [sqlite3.open /mod/etc/webif.db]
	catch {
		$settingsdb query {
			CREATE TABLE settings(name text, nval int, tval text);
		}
		$settingsdb query {
			CREATE UNIQUE INDEX key on settings(name);
		}
	}
} else {
	set settingsdb [sqlite3.open /mod/etc/webif.db]
}

class settings {
	hostname	""
	channel_group	0
	epg_style	"standard"
	smtp_server	""
	pkgdev		0
	notoolbar	0
	nomobile	0
}

settings method hostname {{name ""}} {
	if {$name == ""} {
		# Get
		if {[catch {set fd [open "/var/lib/humaxtv/hostname" r]}]} {
			set name "humax"
		} else {
			set name [string trim [read $fd]]
			close $fd
		}
		return $name
	} else {
		# Set
		if [string is alnum -strict $name] {
			set fd [open "/var/lib/humaxtv/hostname" w]
			puts $fd $name
			close $fd
			exec hostname -F /var/lib/humaxtv/hostname
		}
	}
}

settings method smtp_server {{server ""}} {
	if {$server == ""} {
		# Get
		if {[catch {set fd [open "/mod/etc/ssmtp/ssmtp.conf" r]}]} {
			set server "mail"
		} else {
			foreach line [split [read $fd] "\n"] {
				set a [string first "mailhub=" $line]
				if {$a == 0} {
					set server [string range $line 8 end]
					set server [string trim $server]
				}
			}
			close $fd
		}
		return $server
	} else {
		# Set
		if {[string is ascii -strict $server]} {
			set fd [open "/mod/etc/ssmtp/ssmtp.conf" w]
			puts $fd "mailhub=$server"
			puts $fd "rewriteDomain=hummypkg.org.uk"
			puts $fd "hostname=[$self hostname].hummypkg.org.uk"
			close $fd
		}
	}
}

settings method _nval_setting {name {val -1}} {
	global settingsdb

	if {$val == -1} {
		# Get
		set res [$settingsdb query "
			select nval from settings
			where name = '$name'
		"]
		if {$res ne ""} {
			return [lindex [lindex $res end] end]
		}
		return 0
	} else {
		# Set
		$settingsdb query "
			replace into settings(name,nval)
			values('$name', $val)
		"
		return 0
	}
}

settings method channel_group {{group -1}} {
	return [$self _nval_setting channel_group $group]
}

settings method epg_style {{style -1}} {
	if {$style != -1} {
		if {$style eq "grid"} { set style 1 } else { set style 0}
		return [$self _nval_setting epg_style $style]
	}
	set val [$self _nval_setting epg_style]
	if {$val == 1} {
		return "grid"
	}
	return "standard"
}

settings method pkgdev {{val -1}} {
	return [$self _nval_setting pkgdev $val]
}

settings method notoolbar {{val -1}} {
	return [$self _nval_setting notoolbar $val]
}

settings method nomobile {{val -1}} {
	return [$self _nval_setting nomobile $val]
}

settings method sortorder {{val -1}} {
	return [$self _nval_setting sortorder $val]
}

settings method channel_groups {} {
	set ret ""
	set db [sqlite3.open /var/lib/humaxtv/setup.db]
	set res [$db query {
		select itemText from TBL_MENUCONFIG
		where itemName like 'FAV\_CUSTOM\_STR%%' ESCAPE '\'
	}]
	$db close
	foreach g $res {
		set g $g(itemText)
		if {[string index $g 0] == "\025"} {
			lappend ret [string range $g 1 end]
		} else {
			lappend ret $g
		}
	}
	return $ret
}

settings method aclusers {} {
	if {![file exists "/mod/etc/htpasswd"]} { return {} }
	set fd [open "/mod/etc/htpasswd" r]
	set users {}
	foreach line [string trim [split [read $fd] "\n"]] {
		set info [split $line ":"]
		if {[llength $info] != 3} { continue }
		lappend users $info
	}
	$fd close
	return $users
}

settings method mongooseauth {{mode 1}} {
	set fd [open "/mod/etc/mongoose.conf" r]
	set fdnew [open "/mod/etc/mongoose.conf.new" w]
	foreach line [string trim [split [read $fd] "\n"]] {
		if {[string match -nocase {authentication_domain*} $line]} {
			continue
		}
		if {[string match -nocase {global_passwords_file*} $line]} {
			continue
		}
		if {$line ne ""} { puts $fdnew $line }
	}
	$fd close
	if {$mode} {
		puts $fdnew "authentication_domain webif"
		puts $fdnew "global_passwords_file /mod/etc/htpasswd"
	}
	$fdnew close
	file delete "/mod/etc/mongoose.conf"
	file rename "/mod/etc/mongoose.conf.new" "/mod/etc/mongoose.conf"
}

settings method addacluser {user pass} {
	set msg ""
	if {![llength [$self aclusers]]} {
		$self mongooseauth 1
		append msg "Enabled web server authentication<br>"
	}
	set cmd "/mod/sbin/mongoose -A /mod/etc/htpasswd webif $user $pass"
	exec {*}$cmd
	append msg "Successfully updated user $user"
	return $msg
}

settings method delacluser {user} {
	if {![file exists "/mod/etc/htpasswd"]} { return }
	set fd [open "/mod/etc/htpasswd" r]
	set fdnew [open "/mod/etc/htpasswd.new" w]
	set num 0
	foreach line [string trim [split [read $fd] "\n"]] {
		lassign [split $line ":"] xuser
		if {$xuser eq $user} { continue }
		if {$line ne ""} {
			puts $fdnew $line
			incr num
		}
	}
	$fd close
	$fdnew close
	file delete "/mod/etc/htpasswd"
	file rename "/mod/etc/htpasswd.new" "/mod/etc/htpasswd"
	set msg "Successfully removed user $user"

	if {$num == 0} {
		$self mongooseauth 0
		append msg "<br>Disabled web server authentication<br>"
	}
	return $msg
}