#import koji
#from kojiweb import util
#from six.moves.urllib.parse import quote
#import cgi

#def printValue($key, $value, $sep=', ')
  #if $key in ('brootid', 'buildroot_id')
<a href="buildrootinfo?buildrootID=$value">$value</a>
  #elif $isinstance($value, list) 
$sep.join([$str($val) for $val in $value]) 
  #elif $isinstance($value, dict)
$sep.join(['%s=%s' % (($n == '' and "''" or $n), $v) for $n, $v in $value.items()])
  #else 
$value
  #end if
#end def

#def printProperties($props)
  #echo ', '.join([$v is not None and '%s=%s' % ($n, $v) or $str($n) for $n, $v in $props.items()])
#end def

#def printMap($vals, $prefix='')
  #for $key, $value in $vals.items()
  #if $key == 'properties'
  ${prefix}properties&nbsp;=&nbsp;$printProperties($value)<br/>
  #elif $key != '__starstar'
  $prefix$key&nbsp;=&nbsp;$printValue($key, $value)<br/>
  #end if
  #end for  
#end def

#def printOpts($opts)
  #if $opts
  <strong>Options:</strong><br/>
  $printMap($opts, '&nbsp;&nbsp;')
  #end if
#end def

#def printChildren($taskID, $childMap)
  #set $iter = 0
  #set $children = $childMap[$str($taskID)]
  #if $children
  <ul>
    #for $child in $children
    #set $iter += 1
    #if $iter < $len($children)
    <li class="sibling">
    #else
    <li>
    #end if
      #set $childState = $util.taskState($child.state)
      <span class="treeBranch">
        <span class="treeLabel">
          <a href="taskinfo?taskID=$child.id" class="task$childState" title="$childState">$koji.taskLabel($child)</a>
        </span>
      </span>
    $printChildren($child.id, $childMap)
    </li>
    #end for
  </ul>
  #end if
#end def

#include "includes/header.chtml"

  <h4>Information for task <a href="taskinfo?taskID=$task.id">$koji.taskLabel($task)</a></h4>

  <table>
    <tr>
      <th>ID</th><td>$task.id</td>
    </tr>
    <tr>
      <th>Method</th><td>$task.method</td>
    </tr>
    <tr>
      <th>Parameters</th>
      <td>
        #if $task.method == 'buildSRPMFromSCM'
        <strong>SCM URL:</strong> $params[0]<br/>
        #if $len($params) > 1
        <strong>Build Tag:</strong>: <a href="taginfo?tagID=$buildTag.name">$buildTag.name</a><br/>
        #end if
        #if $len($params) > 2
        $printOpts($params[2])
        #end if
        #elif $task.method == 'buildSRPMFromCVS'
        <strong>CVS URL:</strong> $params[0]
        #elif $task.method == 'buildArch'
        <strong>SRPM:</strong> $params[0]<br/>
        <strong>Build Tag:</strong> <a href="taginfo?tagID=$buildTag.name">$buildTag.name</a><br/>
        <strong>Arch:</strong> $params[2]<br/>
        <strong>Keep SRPM?</strong> #if $params[3] then 'yes' else 'no'#<br/>
        #if $len($params) > 4
        $printOpts($params[4])
        #end if
        #elif $task.method == 'tagBuild'
        <strong>Destination Tag:</strong> <a href="taginfo?tagID=$destTag.id">$destTag.name</a><br/>
        <strong>Build:</strong> <a href="buildinfo?buildID=$build.id">$koji.buildLabel($build)</a>
        #elif $task.method == 'buildNotification'
        #set $build = $params[1]
        #set $buildTarget = $params[2]
        <strong>Recipients:</strong>&nbsp;$printValue('', $params[0])<br/>
        <strong>Build:</strong> <a href="buildinfo?buildID=$build.id">$koji.buildLabel($build)</a><br/>
        #if $buildTarget
        <strong>Build Target:</strong> <a href="buildtargetinfo?targetID=$buildTarget.id">$buildTarget.name</a><br/>
        #else
        <strong>Build Target:</strong> (no build target)<br/>
        #end if
        <strong>Web URL:</strong> <a href="$params[3]">$params[3]</a>
        #elif $task.method == 'tagNotification'
        <strong>Recipients:</strong>&nbsp;$printValue('', $params[0])<br/>
        <strong>Successful?:</strong> #if $params[1] then 'yes' else 'no'#<br/>
        #if $destTag
        <strong>Tagged Into:</strong> <a href="taginfo?tagID=$destTag.id">$destTag.name</a><br/>
        #end if
        #if $srcTag
        <strong>#if $destTag then 'Moved From:' else 'Untagged From:'#</strong> <a href="taginfo?tagID=$srcTag.id">$srcTag.name</a><br/>
        #end if
        <strong>Build:</strong> <a href="buildinfo?buildID=$build.id">$koji.buildLabel($build)</a><br/>
        <strong>#if $destTag then 'Tagged By:' else 'Untagged By:'#</strong> <a href="userinfo?userID=$user.id">$user.name</a><br/>
        <strong>Ignore Success?:</strong> #if $params[6] then 'yes' else 'no'#<br/>
        #if $params[7]
        <strong>Failure Message:</strong> $params[7]
        #end if
        #elif $task.method == 'build'
        <strong>Source:</strong> $params[0]<br/>
        <strong>Build Target:</strong> <a href="buildtargetinfo?name=$params[1]">$params[1]</a><br/>
        $printOpts($params[2])
        #elif $task.method == 'maven'
        <strong>SCM URL:</strong> $params[0]<br/>
        <strong>Build Target:</strong> <a href="buildtargetinfo?name=$params[1]">$params[1]</a><br/>
        $printOpts($params[2])
	#elif $task.method == 'buildMaven'
	<strong>SCM URL:</strong> $params[0]<br/>
	<strong>Build Tag:</strong> <a href="taginfo?tagID=$buildTag.id">$buildTag.name</a><br/>
	#if $len($params) > 2
        $printOpts($params[2])
        #end if
	#elif $task.method == 'wrapperRPM'
	<strong>Spec File URL:</strong> $params[0]<br/>
	#if 'locked' in $buildTarget
	#set $buildTag = $buildTarget
	<strong>Build Tag:</strong> <a href="taginfo?tagID=$buildTag.id">$buildTag.name</a><br/>
	#else
	<strong>Build Target:</strong> <a href="buildtargetinfo?targetID=$buildTarget.id">$buildTarget.name</a><br/>
	#end if
	#if $params[2]
	<strong>Build:</strong> <a href="buildinfo?buildID=$params[2].id">$koji.buildLabel($params[2])</a><br/>
	#end if
	#if $params[3]
	<strong>Task:</strong> <a href="taskinfo?taskID=$wrapTask.id">$koji.taskLabel($wrapTask)</a><br/>
	#end if
        #if $len($params) > 4
        $printOpts($params[4])
        #end if
        #elif $task.method == 'chainmaven'
        <strong>Builds:</strong><br/>
        <table>
        #for $key, $val in $params[0].items()
        <tr><td><strong>$key:</strong></td><td>$printMap($val)</td></tr>
        #end for
        </table>
        <strong>Build Target:</strong> <a href="buildtargetinfo?name=$params[1]">$params[1]</a><br/>
        #if $len($params) > 2
        $printOpts($params[2])
        #end if
        #elif $task.method == 'livecd' or $task.method == 'appliance' or $task.method == 'livemedia'
        <strong>Name:</strong> $params[0]<br/>
        <strong>Version:</strong> $params[1]<br/>
        <strong>Arch:</strong> $params[2]<br/>
        <strong>Build Target:</strong> <a href="buildtargetinfo?name=$params[3]">$params[3]</a><br/>
        <strong>Kickstart File:</strong> $params[4]<br/>
        $printOpts($params[5])
        #elif $task.method == 'image'
        <strong>Arches:</strong> #echo ', '.join($params[2])#<br/>
        <strong>Build Target:</strong> <a href="buildtargetinfo?name=$params[3]">$params[3]</a><br/>
        <strong>Installation Tree:</strong> $params[4]<br/>
        $printOpts($params[5])
        #elif $task.method == 'createLiveCD' or $task.method == 'createAppliance' or $task.method == 'createLiveMedia'
        #if $len($params) > 4:
        ## new method signature
        <strong>Arch:</strong> $params[3]<br/>
        <strong>Kickstart File:</strong> $params[7]<br/>
        #if $len($params) > 8
        $printOpts($params[8])
        #end if
        #else
        ## old method signature
        <strong>Arch:</strong> $params[0]<br/>
        <strong>Build Target:</strong> <a href="buildtargetinfo?name=$params[1]">$params[1]</a><br/>
        <strong>Kickstart File:</strong> $params[2]<br/>
        #if $len($params) > 3
        $printOpts($params[3])
        #end if
        #end if
        #elif $task.method == 'createImage'
        #set $target = $params[4]
        <strong>Build Target:</strong> <a href="buildtargetinfo?name=$target.name">$target.name</a><br/>
        <strong>Install Tree:</strong> $params[7]<br/>
        $printOpts($params[8])
        #elif $task.method == 'winbuild'
        <strong>VM:</strong> $params[0]<br/>
        <strong>SCM URL:</strong> $params[1]<br/>
        <strong>Build Target:</strong> <a href="buildtargetinfo?name=$params[2]">$params[2]</a><br/>
        #if $len($params) > 3
        $printOpts($params[3])
        #end if
        #elif $task.method == 'vmExec'
        <strong>VM:</strong> $params[0]<br/>
        <strong>Exec Params:</strong><br/>
        #for $info in $params[1]
        #if $isinstance($info, dict)
        $printMap($info, '&nbsp;&nbsp;&nbsp;&nbsp;')
        #else
        &nbsp;&nbsp;$info<br/>
        #end if
        #end for
        #if $len($params) > 2
        $printOpts($params[2])
        #end if
        #elif $task.method == 'newRepo'
        <strong>Tag:</strong> <a href="taginfo?tagID=$tag.id">$tag.name</a><br/>
        #if $len($params) > 1
          $printOpts($params[1])
        #end if
        #elif $task.method == 'distRepo'
        <strong>Tag:</strong> <a href="taginfo?tagID=$tag.id">$tag.name</a><br/>
        <strong>Repo ID:</strong> <a href="$pathinfo.distrepo($params[1],$tag.name)">$params[1]</a></br>
        <strong>Keys:</strong> $printValue(0, $params[2])<br/>
        $printOpts($params[3])
        #elif $task.method == 'prepRepo'
        <strong>Tag:</strong> <a href="taginfo?tagID=$params[0].id">$params[0].name</a>
        #elif $task.method == 'createrepo'
        <strong>Repo ID:</strong> $params[0]<br/>
        <strong>Arch:</strong> $params[1]<br/>
        #set $oldrepo = $params[2]
        #if $oldrepo
            <strong>Old Repo ID:</strong> $oldrepo.id<br/>
            <strong>Old Repo Creation:</strong> $koji.formatTimeLong($oldrepo.creation_time)<br/>
        #end if
        #if $len($params) > 4 and $params[4]
            <strong>External Repos:</strong> $printValue(None, [ext['external_repo_name'] for ext in $params[3]])<br/>
        #end if
        #elif $task.method == 'createdistrepo'
        <strong>Tag:</strong> <a href="taginfo?tagID=$tag.id">$tag.name</a><br/>
        <strong>Repo ID:</strong> <a href="$pathinfo.distrepo($params[1],$tag.name)">$params[1]</a></br>
        <strong>Arch:</strong> $printValue(0, $params[2])<br/>
        <strong>Keys:</strong> $printValue(0, $params[3])<br/>
        <strong>Options:</strong> $printMap($params[4], '&nbsp;&nbsp;&nbsp;&nbsp;')
        #elif $task.method == 'dependantTask'
        <strong>Dependant Tasks:</strong><br/>
        #for $dep in $deps
        &nbsp;&nbsp;<a href="taskinfo?taskID=$dep.id" class="task$util.taskState($dep.state)">$koji.taskLabel($dep)</a><br/>
        #end for
        <strong>Subtasks:</strong><br/>
        #for $subtask in $params[1]
        &nbsp;&nbsp;<strong>Method:</strong> $subtask[0]<br/>
        &nbsp;&nbsp;<strong>Parameters:</strong> #echo ', '.join([$str($subparam) for $subparam in $subtask[1]])#<br/>
        #if $len($subtask) > 2 and $subtask[2]
        &nbsp;&nbsp;<strong>Options:</strong><br/>
        $printMap($subtask[2], '&nbsp;&nbsp;&nbsp;&nbsp;')
        #end if
        <br/>
        #end for
        #elif $task.method == 'chainbuild'
        <strong>Build Groups:</strong><br/>
        #set $groupNum = 0
        #for $urls in $params[0]
        #set $groupNum += 1
        &nbsp;&nbsp;<strong>$groupNum</strong>: #echo ', '.join($urls)#<br/>
        #end for
        <strong>Build Target:</strong> <a href="buildtargetinfo?name=$params[1]">$params[1]</a><br/>
        $printOpts($params[2])
        #elif $task.method == 'waitrepo'
        <strong>Build Target:</strong> $params[0]<br/>
        #if $params[1]
        <strong>Newer Than:</strong> $params[1]<br/>
        #end if
        #if $params[2]
        <strong>NVRs:</strong> $printValue('', $params[2])
        #end if
        #elif $task.method == 'restart'
        <strong>Host:</strong> <a href="hostinfo?hostID=$params[0].id">$params[0].name</a><br/>
        #elif $task.method == 'restartVerify'
        <strong>Host:</strong> <a href="hostinfo?hostID=$params[1].id">$params[1].name</a><br/>
        <strong>Restart Task:</strong>
            <a href="taskinfo?taskID=$rtask.id" class="task$util.taskState($rtask.state)">$koji.taskLabel($rtask)</a><br/>
        #elif $task.method == 'runroot'
        <strong>Build Tag:</strong> <a href="taginfo?tagID=$params[0]">$params[0]</a><br/>
        <strong>Arch:</strong> $params[1]<br/>
        $printOpts($params[3])
        <strong>Commands:</strong> $params[2]<br/>
        #else
        $params
        #end if
      </td>
    </tr>
    <tr>
      #set $state = $util.taskState($task.state)
      <th>State</th>
      <td class="task$state">$state
      #if $currentUser and ('admin' in $perms or $task.owner == $currentUser.id)
      #if $task.state in ($koji.TASK_STATES.FREE, $koji.TASK_STATES.OPEN, $koji.TASK_STATES.ASSIGNED)
      <span class="adminLink">(<a href="canceltask?taskID=$task.id$util.authToken($self)">cancel</a>)</span>
      #elif $task.state in ($koji.TASK_STATES.CANCELED, $koji.TASK_STATES.FAILED) and (not $parent)
      <span class="adminLink">(<a href="resubmittask?taskID=$task.id$util.authToken($self)">resubmit</a>)</span>
      #end if
      #end if
      </td>
    </tr>
    #if $taskBuild
    <tr>
      <th>Build</th><td><a href="buildinfo?buildID=$taskBuild.build_id">$koji.buildLabel($taskBuild)</a></td>
    </tr>
    #end if
    <tr>
      <th>Created</th><td>$util.formatTimeLong($task.create_time)</td>
    </tr>
    #if $task.start_time
    <tr>
      <th>Started</th><td>$util.formatTimeLong($task.start_time)</td>
    #end if
    #if $task.state == $koji.TASK_STATES.OPEN
    #if $estCompletion
    <tr>
      <th>Est. Completion</th><td>$util.formatTimeLong($estCompletion)</td>
    </tr>
    #end if
    #elif $task.completion_time
    <tr>
      <th>Completed</th><td>$util.formatTimeLong($task.completion_time)</td>
    </tr>
    #end if
    <tr>
      <th>Owner</th>
      <td>
        #if $owner
          #if $owner.usertype == $koji.USERTYPES['HOST']
          <a href="hostinfo?userID=$owner.id">$owner.name</a>
          #else
          <a href="userinfo?userID=$owner.id">$owner.name</a>
          #end if
        #end if
      </td>
    </tr>
    <tr>
      <th>Channel</th>
      <td>
        #if $task.channel_id
        <a href="channelinfo?channelID=$task.channel_id">$channelName</a>
        #end if
      </td>
    </tr>
    <tr>
      <th>Host</th>
      <td>
        #if $task.host_id
        <a href="hostinfo?hostID=$task.host_id">$hostName</a>
        #end if
      </td>
    </tr>
    <tr>
      <th>Arch</th><td>$task.arch</td>
    </tr>
    #if $buildroots
    <tr>
      <th>Buildroot#if $len($buildroots) > 1 then 's' else ''#</th>
      <td>
        #for $buildroot in $buildroots
        <a href="buildrootinfo?buildrootID=$buildroot.id">#if $task.method == 'vmExec' then '' else '/var/lib/mock/'#$buildroot.tag_name-$buildroot.id-$buildroot.repo_id</a><br/>
        #end for
      </td>
    </tr>
    #end if
    <tr>
      <th>Parent</th>
        <td>
        #if $parent
        <a href="taskinfo?taskID=$parent.id" class="task$util.taskState($parent.state)">$koji.taskLabel($parent)</a>
        #end if
      </td>
    </tr>
    <tr>
      <th>Descendants</th>
      <td class="tree">
        #if $len($descendents[$str($task.id)]) > 0
        <span class="root">$task.method</span>
        #end if
        $printChildren($task.id, $descendents)
      </td>
    </tr>
    <tr>
      <th>Waiting?</th><td>#if $task.waiting then 'yes' else 'no'#</td>
    </tr>
    <tr>
      <th>Awaited?</th><td>#if $task.awaited then 'yes' else 'no'#</td>
    </tr>
    <tr>
      <th>Priority</th><td>$task.priority</td>
    </tr>
    <tr>
      <th>Weight</th><td>#echo '%.2f' % $task.weight#</td>
    </tr>
    <tr>
      <th>Result</th>
      <td>
      #if $abbr_result_text
        <div id="abbr-result">
        $abbr_result_text
        </div>
        <div id="full-result">
        $full_result_text
        </div>
        <a href="#" collapse" id="toggle-abbreviated-result" style="display: none;">Show abbreviated results</a>
        <a href="#" collapse" id="toggle-full-result" style="display: none;">Show complete results</a>
      #else
         <div id="result">
        $full_result_text
        </div>
      #end if
      </td>
    </tr>
    <tr>
      <th>Output</th>
      <td>
        #for $volume, $filename in $output
        <a href="$pathinfo.task($task.id, volume=$volume)/$quote($filename)">$filename</a>
           #if $filename.endswith('.log')
           (<a href="getfile?taskID=$task.id&volume=$volume&name=$quote($filename)&offset=-4000">tail</a>)
           #end if
        <br/>
        #end for
        #if $task.state not in ($koji.TASK_STATES.CLOSED, $koji.TASK_STATES.CANCELED, $koji.TASK_STATES.FAILED) and \
            $task.method in ('buildSRPMFromSCM', 'buildArch', 'createLiveMedia', 'buildMaven', 'wrapperRPM', 'vmExec', 'createrepo', 'runroot', 'createAppliance', 'createLiveCD')
        <br/>
        <a href="watchlogs?taskID=$task.id">Watch logs</a>
        #end if
      </td>
    </tr>
  </table>

#if $abbr_result_text
  <script type="text/javascript">
    (function() {
       var abbr = document.getElementById('abbr-result');
       var full = document.getElementById('full-result');
       var link_to_show_abbr = document.getElementById('toggle-abbreviated-result');
       var link_to_show_full = document.getElementById('toggle-full-result');
       full.style.display = 'none';
       abbr.style.display = 'block'
       link_to_show_full.style.display = 'inline'
       link_to_show_abbr.style.display = 'none'
       var trigger = function(e) {
         if (link_to_show_abbr.style.display == 'none') {
           link_to_show_abbr.style.display = 'inline'
           link_to_show_full.style.display = 'none'
           abbr.style.display = 'none';
           full.style.display = 'block'
         }
         else {
           link_to_show_abbr.style.display = 'none'
           link_to_show_full.style.display = 'inline'
           abbr.style.display = 'block';
           full.style.display = 'none'
         }
         return false;
       };

       link_to_show_full.onclick = trigger
       link_to_show_abbr.onclick = trigger
    })();
  </script>
#end if
#include "includes/footer.chtml"
