#include "divisional_state_capital_report_generator.h"
 
void Xport_report_suite::divisional_state_capital_report_generator::create_header(Xport::document& doc) const
{
  using namespace Xport;

  *doc.title() << "Divisional State Capital Report";

  element hdr(Xport::div, "id_header");
  hdr << element(Xport::div, "id_left_hdr");
  markup::iterator it = hdr.insert(element(Xport::div, "id_center_hdr"));
  *it << (element(h1) << "US Divisional State Capital Report");
  element lnk(a);
  lnk << "Wikipedia";
  lnk.attribute(href, "http://en.wikipedia.org/wiki/Wiki");

  *it << (element(Xport::div, "id_aknowledgement") << "Statistics and images courtesy of " << lnk);
  hdr << element(Xport::div, "id_right_hdr");

  *doc.body() << hdr;
}

void Xport_report_suite::divisional_state_capital_report_generator::create_report_body(Xport::document& doc) const
{
  using namespace Xport;

  int divsn = new_england;
  for (; divsn <= pacific; ++divsn) {
    std::ostringstream sDivision;
    sDivision << "id_division" << divsn;
    element tbl(table, sDivision.str());
    create_division_table(tbl, divsn);
    doc.body()->insert(tbl);
  }

}

void Xport_report_suite::divisional_state_capital_report_generator::create_division_table(Xport::element& tbl, int dvsn) const
{
  using namespace Xport;

  std::vector<state_info> siv;
  us_state_report_generator::get_divisional_state_data(dvsn, siv, sf_name, ascending);
  std::vector<state_info>::const_iterator it = siv.begin();

  create_table_header(tbl, dvsn);
  int rows = 0;
  long total_area = 0;
  for (; it != siv.end(); ++it, ++rows) {
    markup::iterator mit = tbl.insert(element(tr));
    *mit << (element(td, "", "state_name") << it->name());
    *mit << (element(td) << it->abbr());
    *mit << (element(td, "", "capital") << it->capital());
  }

  if (!tbl.empty()) {
    // now go back and insert the image cell in the first row, with a rowspan of all rows
    markup::iterator mit = tbl.begin();
    assert(mit != tbl.end());
    ++mit;
    assert(mit != tbl.end());
    mit = mit->push_front(element(td, "", "img_cell"));
    std::ostringstream attr_val;
    attr_val << rows + 1;
    mit->attribute(rowspan, attr_val.str());

    // insert image in image cell
    mit = mit->insert(element(img));
    attr_val.str("");
    attr_val << "../img/division_" << dvsn << ".png";
    mit->attribute(src, attr_val.str());
  }

}

void Xport_report_suite::divisional_state_capital_report_generator::create_table_header(Xport::element& tbl, int dvsn) const
{
  using namespace Xport;

  markup::iterator it_row = tbl.insert(element(tr));
  element hdr(th, "", "tbl_hdr");
  hdr << us_state_report_generator::get_division_name(dvsn);
  hdr.attribute(colspan, "4");
  *it_row << hdr;

  it_row = tbl.insert(element(tr, "", "titles"));
  *it_row << (element(th) << "State");
  *it_row << (element(th) << "Abbr");
  *it_row << (element(th) << "Capital");
}


void Xport_report_suite::divisional_state_capital_report_generator::create_footer(Xport::document& doc) const
{
  using namespace Xport;

  element footer(Xport::div, "id_footer");
  footer << (element(p) << "xhtml report and stylesheet created by Xport");
  *doc.body() << footer;
}

void Xport_report_suite::divisional_state_capital_report_generator::create_stylesheet(Xport::document& doc, Xport::stylesheet& ss) const
{
  using namespace Xport;

  stylesheet::iterator it = ss.insert(stylesheet_rule("body"));
  *it << declaration(css::margin, "0px");

  it = ss.insert(stylesheet_rule("#id_header"));
  *it << declaration(css::height, "150px")
      << declaration(css::border, "thin solid green")
      << declaration(margin_bottom, "50px");

  it = ss.insert(stylesheet_rule("#id_center_hdr"));
  *it << declaration(position, "relative");

  it = ss.insert(stylesheet_rule("#id_center_hdr h1"));
  *it << declaration(text_align, "center")
      << declaration(margin_top, "30px")
      << declaration(css::color, "maroon");

  it = ss.insert(stylesheet_rule("#id_aknowledgement"));
  *it << declaration(position, "absolute")
      << declaration(css::right, "15px")
      << declaration(bottom, "5px");

  it = ss.insert(stylesheet_rule("#id_left_hdr"));
  *it << declaration(float_css, "left")
      << declaration(css::width, "30%")
      << declaration(css::height, "150px")
      << declaration(background_color, "red");

  it = ss.insert(stylesheet_rule("#id_center_hdr"));
  *it << declaration(float_css, "left")
      << declaration(css::width, "39%")
      << declaration(css::height, "150px");

  it = ss.insert(stylesheet_rule("#id_right_hdr"));
  *it << declaration(css::width, "30%")
      << declaration(float_css, "right")
      << declaration(css::height, "150px")
      << declaration(background_color, "blue");

  it = ss.insert(stylesheet_rule("table"));
  *it << declaration(css::width, "60%")
      << declaration(margin_left, "auto")
      << declaration(margin_right, "auto")
      << declaration(margin_top, "40px")
      << declaration(border_collapse, "collapse")
      << declaration(css::border, "5px ridge green");

  it = ss.insert(stylesheet_rule(".tbl_hdr"));
  *it << declaration(border_bottom, "2px solid green")
      << declaration(line_height, "150%")
      << declaration(font_size, "16pt")
      << declaration(background_color, "#99ff9a");

  it = ss.insert(stylesheet_rule(".titles th"));
  *it << declaration(border_bottom, "2px solid green")
      << declaration(background_color, "#ffff66")
      << declaration(text_align, "left")
      << declaration(padding_left, "10px");

  it = ss.insert(stylesheet_rule("td"));
  *it << declaration(padding_left, "5px")
      << declaration(background_color, "#ccffff");

  it = ss.insert(stylesheet_rule(".img_cell"));
  *it << declaration(border_right, "2px solid green")
      << declaration(css::width, "200px")
      << declaration(background_color, "white");

  it = ss.insert(stylesheet_rule(".img_cell img"));
  *it << declaration(css::width, "200px");

  it = ss.insert(stylesheet_rule(".capital"));
  *it << declaration(font_weight, "bold")
      << declaration(css::color, "maroon");

  it = ss.insert(stylesheet_rule("#id_footer"));
  *it << declaration(css::width, "60%")
      << declaration(css::height, "50px")
      << declaration(css::border, "3px ridge #6699cc")
      << declaration(margin_left, "auto")
      << declaration(margin_right, "auto")
      << declaration(margin_top, "30px")
      << declaration(margin_bottom, "30px")
      << declaration(background_color, "#ffffcc")
      << declaration(css::color, "#6600cc");

  it = ss.insert(stylesheet_rule("#id_footer p"));
  *it << declaration(text_align, "center")
      << declaration(font_size, "14pt")
      << declaration(line_height, "150%")
      << declaration(margin_top, "10px");

  // add link to stylesheet file in head element
  element css_link(Xport::link);
  css_link.attribute(rel, "stylesheet");
  css_link.attribute(type, "text/css");
  css_link.attribute(href, "divisional_state_capital_report.css");
  *doc.head() << css_link;

}