#!/mod/bin/jimsh

package require cgi
source /mod/var/mongoose/lib/setup

require rsv.class findhsvc system.class

set dir /mod/var/backup

puts "Content-Type: text/html"
puts ""

cgi_input
#cgi_dump

#set _cgi(restore_file) "backup-2011-Jul-09-20:37"

if {![dict exists $_cgi restore_file]} {
	puts "No filename supplied."
	exit
}

set file [file tail [dict get $_cgi restore_file]]
set ffile "/$dir/$file.rbk"

if {![file exists $ffile]} {
	puts "Backup file <i>$file</i> does not exist."
	exit
}

if {[catch { set fd [open $ffile r] } msg]} {
	puts "Error opening <i>$file</i> - $msg"
	exit
}

puts "Restoring scheduled events from <i>$file</i>..."

$rsvdb query {begin transaction;}
$rsvdb query {delete from TBL_RESERVATION;}

set fields [lsort [[rsv] vars]]

set data [split [read $fd] "\n"]

foreach line $data {
	set vals [split $line "\t"]
	if {[lindex $vals 0] ne "event"} { continue }
	set vars {}
	set i 0
	foreach f $fields {
		if {$f eq "aulEventToRecordInfo"} { continue }
		incr i
		lappend vars $f [lindex $vals $i]
	}

	set rsv [rsv new $vars]

	# Need to fix up channel and CRID mappings in case something has
	# changed during a channel scan.

	puts "  Restoring [$rsv name]"

	set bad 0
	# First, the service number
	set ohsvc [$rsv get hsvc]
	if {$ohsvc > 0} {
		set hsvc [$rsv fix_hsvc]
		if {$hsvc == 0} {
			puts "    Cannot find channel, restore failed."
			set bad 1
		} elseif {$hsvc != $ohsvc} {
			puts -nonewline "    Service number has "
			puts "changed $ohsvc -> $hsvc, fixing."
		} else {
			puts "    No change in channel service."
		}
	}

	if {!$bad} {
		if {[catch {$rsv insert pending 1} msg]} {
			puts "    Error inserting event, $msg"
		}
	}
}

$rsvdb query {commit transaction;}

puts "Restoring favourite channels..."
$rsvdb query {begin transaction;}
$rsvdb query {delete from channel.TBL_FAV}

set grp 0
foreach line $data {
	set vals [split $line "\t"]
	if {[lindex $vals 0] ne "fav"} { continue }

	set group [lindex $vals 1]
	set type [lindex $vals 2]
	set chan [lindex $vals 3]
	set hsvc [get_channel_attr $chan]

	if {$grp != $group} {
		set grp $group
		puts "  Group $grp"
	}

	puts "    $chan"

	if {$hsvc eq ""} {
		puts "        Cannot map channel name to service."
		continue
	}

	set query "
		insert into channel.TBL_FAV(hSvc, eFavGroup, eSvcType)
		values($hsvc, $group, $type);
	"

	$rsvdb query $query
}

$rsvdb query {commit transaction;}

system restartpending

close $fd
rsv cleanup

