#!/mod/bin/jimsh

package require cgi
source /mod/webif/lib/setup
require settings.class pkg.class

if {[[settings] pkgdev]} { set filter 0 } else { set filter 1 }

pkg loadmeta

proc nav {active} {
	set q "<div data-role=navbar data-id=pkg_navbar>\n <ul>\n"
	foreach f {installed available upgrades} {
		append q "  <li><a"
		if {$f eq $active} {
			append q { class="ui-btn-active ui-state-persist"}
		}
		append q " href=pkg[string range $f 0 0]_b.jim>"
		append q "[string totitle $f]</a></li>\n"
	}
	append q " </ul>\n</div>\n"
	return $q
}

proc pkgtop {type} {
	puts "
	<div data-role=page id=pkga>
		<div data-role=header data-theme=b>
			[_header]
			[nav $type]
		</div>
		<div data-role=content>
	"
}

proc pkgrow {type pkg} {
	set name [$pkg get name]
	puts "<li class=\"pkg_$name\"><h3>$name</h3>"

	if {$type eq "avail"} {
		puts "<p class=ui-li-aside>[$pkg get latest]</p>"
	} else {
		puts "<p class=ui-li-aside>[$pkg get installed]</p>"
	}

	if {$type eq "upgr"} {
		puts "<p>Latest: [$pkg get latest]</p>"
	}

	if {[dict exists $::pkgmeta $name]} {
		puts "<p class=wsn>$::pkgmeta($name)</p>"
	} else {
		puts "<p class=wsn>[$pkg get descr]</p>"
	}

	if {![$pkg is installed]} {
		set btype Install
	} elseif {$type eq "upgr" && [$pkg is upgradable]} {
		set btype Upgrade
	} else {
		set btype Remove
	}

	puts "
 <p>
    <a data-inline=true data-role=button data-mini=true data-theme=e
     href=#
     action=[string tolower $btype] pkg=\"$name\"
     class=[string tolower $btype]>$btype</a>
 </p>
	"

	puts "</li>"
}

proc pkglist {type} {
	set pkgs [pkg $type]

	puts "<ul data-role=listview>"

	if {[llength $pkgs] <= 0} {
		puts "<li><i>No packages "
		switch $type {
			inst { puts "are installed." }
			upgr { puts "are available for upgrade; try updating the package list from the Internet using the button above." }
			avail { puts "are available for installation." }
		}
		puts "</i></li></ul>"
		return
	}

	foreach pkg $pkgs {
		if {$type ne "upgr" && $::filter && \
		    ![dict exists $::pkgmeta $pkg]} { continue }
		pkgrow $type [pkg load $pkg]
	}
	if {$::filter} {
		puts "<li data-role=list-divider>This is a filtered package list. To show all packages, enable the <i>Show development and advanced packages</i> in the settings screen.</li>"
	}
	puts "</ul>"
}

mheader

switch $pageid {
	pkgi_b {
		set type installed
		set qtype inst
	}
	pkga_b {
		set type available
		set qtype avail
	}
	default {
		set type upgrades
		set qtype upgr
	}
}

pkgtop $type

puts {
<ul data-role=listview>
<li>
	<button data-theme=e class=opkg_update>
		Update package list from Internet
	</button>
}

if {$pageid eq "pkgu_b"} {
	puts {
		<button data-theme=e class=opkg_upgrade>
			Upgrade all packages
		</button>
	}
}

puts {
</li>
</ul>
}

pkglist $qtype

puts {
<div data-role=popup class="opkg_popup ui-corner-all" data-theme=e>
	<div data-role=header data-theme=a class=ui-corner-top>
		<h1>Results</h1>
	</div>
	<div data-role=content data-theme=d class="ui-corner-bottom ui-content">
		<p class="pre opkg_popup_text" data-theme=d></p>
	</div>
	<center><div class="hidden opkg_op_complete">
		<img border=0 src=/images/167_2_00_Check_W2_SUB.png>
		Operation complete.
		<a href=# data-role=button data-inline=true data-rel=back
		    data-mini=true data-theme=b>Close</a>  
	</div></center>
</div>
}

mfooter