#!/usr/bin/perl -w

use strict;
use warnings;
use Cwd;
use File::Basename;
use Getopt::Long;
use HTML::Template::Pro;
use Test::Repocop::Report::HTML;

my $verbose=0;

my $BRANCH='sisyphus';
my $taskdir;
my $filename='index.html';
my $img_dir='img/';
my $outdir;

GetOptions (
    'branch=s' => \$BRANCH,
    'taskreportdir=s' => \$taskdir,
    'outdir=s' => \$outdir,
    'outfile=s' => \$filename,
    'img=s' => \$img_dir,
    );
$taskdir//='/var/ftp/pub/repocop/'.$BRANCH.'-tasktest/tasks';
$outdir//=dirname($taskdir);

my $file=$outdir ? $outdir.'/'.$filename : $filename;
#$file=$ARGV[0] if @ARGV;

#my $header='Automated Package Maintainance Cluster Public status page';
my $header='Repocop for '.$BRANCH.' incoming<br>Repocop для '.$BRANCH.' incoming';

# repo state summary status patches
my $tmpl_src =q@
<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf8">
  <meta http-equiv="refresh" content="600">
  <title><TMPL_VAR NAME="HEAD"></title>
  <!-- link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.no-icons.min.css" rel="stylesheet" -->
  <link href="bootstrap-combined.no-icons.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<TMPL_IF NAME="H1"><h1><TMPL_VAR NAME="H1"></h1></TMPL_IF>
<hr>
<table class="table table-bordered table-striped table-hover">
<caption>repocop tested tasks:</caption>
<tr>
<th style="text-align: center">status</th>
<th style="text-align: center">task</th>
<th style="text-align: center">repo</th>
<th style="text-align: center">state</th>
<th style="text-align: center">description</th>
<th style="text-align: center">summary</th>
</tr>
<TMPL_LOOP NAME=TASKS>
<tr>
<td style="text-align: center"><img src="@.$img_dir.q@<TMPL_VAR NAME="status">.png"><TMPL_IF NAME="patches"><a href="<TMPL_VAR NAME="taskurl">/reports/diff"><img src="@.$img_dir.q@patch.png"></a></TMPL_IF></td>
<td style="text-align: center"><TMPL_IF NAME="id"><TMPL_VAR NAME="id"></TMPL_IF></td>
<td style="text-align: center"><TMPL_IF NAME="repo"><TMPL_VAR NAME="repo"></TMPL_IF></td>
<td style="text-align: center"><TMPL_IF NAME="state"><TMPL_VAR NAME="state"></TMPL_IF><TMPL_IF NAME="try"> #<TMPL_VAR NAME="try"></TMPL_IF><TMPL_IF NAME="testonly"> [test-only]</TMPL_IF></td>
<td style="text-align: center"><TMPL_VAR NAME="description"></td>
<td><TMPL_IF NAME="summary"><TMPL_VAR NAME="summary"><TMPL_ELSE>&nbsp;</TMPL_IF></td>
</tr>
</TMPL_LOOP>
</table>
<p><TMPL_VAR NAME="BOTTOM_COMMENT"></p>
</div>
</body>
</html>
@;

my @tasks=glob($taskdir.'/*/*');
my @task_loop;
foreach my $taskpath (@tasks) {
    push @task_loop, &load_tasks($taskpath);
}

#, print_to=>*CURFILE does not work :(
open (my $fh, ">", $file) or die "can't open $file!";
my $tmpl = HTML::Template::Pro->new(scalarref => \$tmpl_src);
$tmpl->param(HEAD=>$header);
$tmpl->param(H1=>$header);
$tmpl->param(TASKS=>\@task_loop);
$tmpl->param(BOTTOM_COMMENT=>
	     'See <a href="tasks">tasks folder</a> for raw repocop reports.<br><hr>'.
	     'last updated '.localtime());

print $fh $tmpl->output();
close ($fh);

&Test::Repocop::Report::HTML::copy_repocop_status_patch_images($outdir.'/'.$img_dir);

sub load_tasks {
    my ($rtaskdir)=@_;
    my $try=basename($rtaskdir);
    my $id=basename(dirname($rtaskdir));
    my $TASKINFO=$rtaskdir.'/task';
    die "bad taskdir: $rtaskdir" if not -d $TASKINFO;
    my $testonly=1 if -e "$TASKINFO/test-only";
    my $status=&load_line("$TASKINFO/status");
    my $taskurl='tasks/'.$id.'/'.$try;
    my $taskid=$id;
    #my $summary='&nbsp;-&nbsp;';
    my $summary='ok';
    if ($status ne 'ok') {
	$taskid='<a href="'.$taskurl.'/reports/html/all_in_one.html">'.$id.'</a>';
	$summary='not ok<br><a href="'.$taskurl.'/reports/html/all_in_one.html">'.$status.' messages</a>'
    }
    my $patches = -e "$TASKINFO/patches";
    if ($patches) {
	$summary .= '<br><a href="'.$taskurl.'/reports/diff">repocop patches</a>';
    }
    my $task={
	id => $taskid, $try=>$try,
	taskurl => $taskurl,
	status => $status,
	patches => $patches,
	testonly => -e "$TASKINFO/test-only",
	summary => $summary,
    };
    foreach my $field (qw/repo state description/) {
	$task->{$field}=&load_line("$TASKINFO/$field");
    }
    return $task;
}

sub load_file {
    my ($name)=@_;
    open (my $fh, '<', $name) || die "can't open $name: $!";
    local $/; # enable localized slurp mode
    my $content = <$fh>;
    close ($fh) || die "can't close $name: $!";
    return $content;
}

sub load_line {
    my ($name)=@_;
    open (my $fh, '<', $name) || die "can't open $name: $!";
    my $content = <$fh>;
    chomp $content;
    close ($fh) || die "can't close $name: $!";
    return $content;
}


print "done.\n" if $verbose;
