#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'erb'
require 'pp'

$dists = ['bookworm', 'sid']
$archs = ['i386', 'amd64']

# collect newest version into packages
def collect_newest_packages(sources)
  @sources = sources
  @packages = {}
  @package = {}
  @sources.each do |source|
    key = ''
    val = ''
    source.each_line do |line|
      if line =~ /^\s.*/
        val += "\n" + line
        @package[key] = val
      elsif line =~ /(.*?):\s(.*)/
        key = Regexp.last_match[1]
        val = Regexp.last_match[2]
        @package.store(key, val)
      end
    end
    pkg_name = @package['Package']
    if @packages.key?(pkg_name)
      old_version = @packages[pkg_name]['Version']
      new_version = @package['Version']
      if `dpkg --compare-versions #{old_version} lt #{new_version}`
        @packages["#{pkg_name}"] = @package
      end
    else
      @packages["#{pkg_name}"] = @package
    end
    @package = {}
  end
  @packages
end

# create tree list, collect same "Source"
def create_package_list(src_list, pkg_list)
  @src_list = src_list
  @pkg_list = pkg_list
  @tree = {}
  @src_list.each do |pkg, content|
    @list = {}
    binaries = content['Binary']
    @list[:version] = content['Version']
    @list[:binaries] = binaries
    @list[:url] = content['Homepage']
    unless @pkg_list[binaries.split(',')[0]].class == NilClass
      @list[:desc] = @pkg_list[binaries.split(',')[0]]['Description'].split("\n")[0]
    else
      @list[:desc] = ""
    end
    @tree[pkg] = @list
  end
  @tree
end
$data = {}
$dists.each do |dist|
  # puts "#{dist}"
  # puts "---"
  sources_file = File.open("dists/#{dist}/main/source/Sources").read.split("\n\n")
  sources_list = collect_newest_packages(sources_file)
  $archs.each do |arch|
    # puts "#{arch}"
    # puts "---"
    packages_file = File.open("dists/#{dist}/main/binary-#{arch}/Packages").read.split("\n\n")
    packages_list = collect_newest_packages(packages_file)
    $data["#{dist}-#{arch}"] = create_package_list(sources_list, packages_list)
  end
end


$data = {}
$dists.each do |dist|
  sources_file = File.open("dists/#{dist}/main/source/Sources").read.split("\n\n")
  sources_list = collect_newest_packages(sources_file)
  $archs.each do |arch|
    packages_file = File.open("dists/#{dist}/main/binary-#{arch}/Packages").read.split("\n\n")
    packages_list = collect_newest_packages(packages_file)
    $data["#{dist}-#{arch}"] = create_package_list(sources_list, packages_list)
  end
end

def create_html_view(pkg_name, backports=nil, all=nil)
  @pkg_name = pkg_name
  @data = $data
  @backports = backports
  @all = all
  @body = ''
  @body +=<<PKGLIST
   <tr class="info">
     <td colspan="1">Packages</td>
     <td colspan="4">#{@data['bookworm-amd64'][@pkg_name][:binaries]}</td>
   </tr>
PKGLIST
  @body +=<<HOMEPAGE
   <tr>
   <td colspan="1">Homepage</td>
   <td colspan="4"><a href="#{@data['bookworm-amd64'][@pkg_name][:url]}">#{@data['bookworm-amd64'][@pkg_name][:url]}</a></td>
   </tr>
HOMEPAGE
  @body +=<<DESC
   <tr>
   <td colspan="1">Description</td>
   <td colspan="4">#{@data['bookworm-amd64'][@pkg_name][:desc]}</td>
   </tr>
DESC
  @body +="    <tr>\n     <td>Codename</td>\n"
  if @backports
    @dists = ["bookworm"]
  else
    @dists = $dists
  end
  @dists.each do |dist|
    if @data["#{dist}-i386"][@pkg_name] # [:version]
      @body += '      <td colspan="2">' + "#{dist.capitalize} " + "</td>\n"
    else
      @body += '      <td colspan="2">' + "#{dist.capitalize} " + "-" + "</td>\n"
    end
  end
  if @backports
    @body += "<td colspan='2'> Sid </td>\n"
  end
  @body +="   <tr>\n     <td>Version</td>\n"
  @dists.each do |dist|
    if @data["#{dist}-i386"][@pkg_name] # [:version]
      @body += '      <td colspan="2">' + @data["#{dist}-amd64"][@pkg_name][:version] + "</td>\n"
    else
      @body += '      <td colspan="2">' + "-" + "</td>\n"
    end
  end
  if @backports
    @body += "<td colspan='2' rowspan='3' style='vertical-align: middle;'> Already in Debian official Archives. <br/> see Debian Package Tracker: <a href='https://tracker.debian.org/pkg/#{@pkg_name}/'>#{@pkg_name}</a></td>\n"
  end
  @body +="   <tr>\n     <td>Architecture</td>\n"
  @dists.size.times {
    if @all
      @body += "<td colspan='2'>all </td>\n"
    else
      $archs.each do |arch|
        @body += '      <td>' + "#{arch}" + "</td>\n"
      end
    end
  }
  @body += "    </tr>\n"
  @body += "    <tr>\n     <td>Status</td>\n"
  @dists.each do |dist|
    if @all
      if @data["#{dist}-amd64"][@pkg_name]
        url = '<a href="https://jenkins.gfd-dennou.org/job/' + "#{@pkg_name}-binaries/" + "architecture=amd64,distribution=#{dist}/" + '">'
        badge ='<img src="https://jenkins.gfd-dennou.org/job/' + "#{@pkg_name}-binaries/" + "architecture=amd64,distribution=#{dist}/" + 'badge/icon' +'"/></a>'
      else
        url = '-'
        badge = ''
      end
      @body +="     <td colspan='2'>#{url}#{badge}</td>\n"
    else
      $archs.each do |arch|
        if @data["#{dist}-#{arch}"][@pkg_name]
          url = '<a href="https://jenkins.gfd-dennou.org/job/' + "#{@pkg_name}-binaries/" + "architecture=#{arch},distribution=#{dist}/" + '">'
          badge ='<img src="https://jenkins.gfd-dennou.org/job/' + "#{@pkg_name}-binaries/" + "architecture=amd64,distribution=#{dist}/" + 'badge/icon' +'"/></a>'
        else
          url = '-'
          badge = ''
        end
        @body +="     <td>#{url}#{badge}</td>\n"
      end
    end
  end
  @body += "    </tr>"
  @body
end


fnames = ["index.htm.ja", "index.htm.en"]
fnames.each do |fname|
  erb = ERB.new(File.read(fname), nil, '-')
  erb.filename = fname
  File.open(fname, "w"){ |f| f.write erb.result(binding) }
end
