#!/mod/bin/jimsh

package require cgi
source /mod/webif/lib/setup
require system.class findhsvc epg.class rsv.class

set runmode cli
if {[string match {*jim} $argv0]} { set runmode cgi }

set schedtime 900
case $runmode {
    cgi {
	cgi_input
	set type [cgi_get type "full"]
	puts "Content-Type: text/html"
	puts "Pragma: no-cache"
	puts "Expires: Thu, 01 Jan 1970 00:00:00 GMT"
	puts ""
    }
    cli {
	set type "full"
	if {"-X" in $argv} { set schedtime 7200 }
    }
}

if {[catch {set pid [exec pgrep humaxtv]}]} {
	puts "Cannot find humaxtv process."
	exit
}

proc get_data {} {
	global pid

	set ret {}
	if {[catch {set data \
	    [exec /mod/bin/lsof -p $pid | grep Video | fgrep .ts]} ]} {
		set ret {}
	} else {
		foreach line [split $data "\n"] {
			regsub -all -- {[[:space:]]+} $line " " line
			set name [file rootname [file tail $line]]
			if {[dict exists $ret $name]} {
				set ret($name) -1
			} else {
				set size [lindex [split $line " "] 6]
				set ret($name) $size
			}
		}
	}
	return $ret
}

set play 0
set rec 0
set seen {}
set output {}

if {$type eq "full"} {
	set data [get_data]
} else {
	set data {}
}

if {[llength $data]} {
	sleep 3
	set ndata [get_data]
	foreach name [array names ndata] {
		if {![dict exists $seen $name]} { set seen($name) 0 }
		if {![dict exists $data $name]} { set data($name) 0 }
		if {$ndata($name) == -1} {
			incr rec
			incr play
			set mode "Chase Playing"
			set icon "745_1_11_Video_3REC_Live.png"
		} elseif {$ndata($name) > $data($name) && $seen($name) < 1} {
			incr rec
			set mode "Recording"
			set icon "745_1_11_Video_1REC.png"
		} else {
			incr play
			set mode "Playing"
			set icon "745_1_10_Video_2Live.png"
		}

		incr seen($name)

		if {$runmode eq "cgi"} {
			lappend output [concat \
			    "<span class=\"va stitem\">\n" \
			    "  <img class=va src=/images/$icon>\n" \
			    "  <span>$mode&nbsp;<i>$name</i></span>\n" \
			    "</span>\n" \
			    ]
		} else {
			lappend output "$mode $name"
		}
	}
}

if {![system instandby] && $play < 1} {
	set hsvc [system param CUR_SVC Value USERCONFIG]

	set ff [$rsvdb query "
		select usSvcid as svcid, usLcn as lcn,
		substr(szSvcName, 2) as name
		from channel.TBL_SVC
		where hSvc = $hsvc
		limit 1
	"]

	if {[llength $ff] == 1} {
		lassign [lindex $ff 0] x svcid x lcn x name
		set epgs [epg dbfetch get \
		    -service $svcid \
		    -time [clock seconds]\
		]
		set prog ""
		if {[llength $epgs] == 1} {
			lassign $epgs epg
			set prog "- [$epg get name] ("
			append prog "[clock format [$epg get start] -format %H:%M] - "
			append prog "[clock format $([$epg get start] + [$epg get duration]) -format %H:%M]"
			append prog ") \[[$epg percent]%\]"
		}

		if {$runmode eq "cgi"} {
			lappend output [concat \
			    "<span class=\"va stitem\">\n" \
			    "  [epg channelicon $name 30 \
			    {vertical-align: middle; padding: 0 4px 0 2px}]\n" \
			    "  <span>Watching <i>$lcn: $name $prog</i></span>\n" \
			    "</span>\n" \
			    ]
		} else {
			lappend output "Watching $lcn: $name $prog"
		}
	}
}

if {[system instandby]} {
	if {$runmode eq "cgi"} {
		lappend output [concat \
		    "<span class=\"va stitem\">\n" \
		    "  <img class=va width=28 style=\"padding: 0 4px\"" \
		    "src=/img/standby.png>\n" \
		    "  <span>System is in standby.</span>\n" \
		    "</span>" \
		]
	} else {
		lappend output "System is in standby."
	}
}

set events [rsv list tbl_reservation \
    " where ersvtype = 3 and nsttime - [clock seconds] < $schedtime 
      and nsttime > [clock seconds] "]
foreach event $events {
	if {$runmode eq "cgi"} {
		set icon "175_1_11_Reservation_Record.png"
		lappend output [concat \
		    "<span class=\"va stitem\">\n" \
		    "  <img class=va src=/images/$icon width=20>\n" \
		    "  <span>Will record <i>[$event name]</i>" \
		    " on [$event channel_name] at"\
		    " [clock format [$event get nsttime] -format {%H:%M}]" \
		    "  </span>\n" \
		    "</span>\n" \
	} else {
		lappend output [concat \
		    "Will record '[$event name]' " \
		    "on [$event channel_name] at " \
		    "[clock format [$event get nsttime] -format {%H:%M}]" \
		]
	}
}

if {[llength $output]} {
	if {$runmode eq "cgi"} {
		puts [join $output "\n<br>\n"]
	} else {
		puts [join $output "\n"]
	}
}

