package HTML::Obj2HTML::Plugin::SemanticUI;

use strict;
use warnings;

my @semanticnumbers = qw(zero one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen);
HTML::Obj2HTML::register_extension("segment", {
  tag => "div",
  attr => { class => "ui segment" }
});
HTML::Obj2HTML::register_extension("button", {
  attr => { class => "ui button" }
});



HTML::Obj2HTML::register_extension("help", {
  tag => "i",
  attr => {
    class => "blue circular icon help",
    style => "margin-left: 5px"
  },
  before => sub {
    my $o = shift;
    if (ref $o eq "HASH") {
      if ($o->{html}) {
        $o->{"data-html"} = $o->{html}; delete($o->{html});
      }
      if ($o->{text}) {
        $o->{"data-content"} = $o->{text}; delete($o->{text});
      }
    }
    return "";
  }
});

HTML::Obj2HTML::register_extension("table", {
  before => sub {
    my $obj = shift;
    if (ref $obj eq "HASH") {
      if ($obj->{header}) {
        push(@{$obj->{_}}, thead => [ tr => HTML::Obj2HTML::iterate("th", $obj->{header}) ]);
        delete($obj->{header});
      }
      if ($obj->{rows}) {
        my @allrows;
        foreach my $r (@{$obj->{rows}}) {
          my @cols = ();
          foreach my $c (@{$r}) {
            push(@cols, td => $c);
          }
          push(@allrows, tr => \@cols);
        }
        push(@{$obj->{_}}, tbody => \@allrows);
        delete($obj->{rows});
      }
      return "";
    }
  },
  attr => { class => 'ui celled table' }
});

# Menus etc
HTML::Obj2HTML::register_extension("dropdownmenu", {
  tag => "div",
  attr => { class => "ui dropdown item" },
  before => sub {
    my $obj = shift;

    if (ref $obj ne "HASH") { return ""; }
    my $label = $obj->{label};
    delete($obj->{label});

    my $items = $obj->{items};
    foreach my $i (@{$items}) {
      if (ref $i eq "HASH") {
        if ($i->{class}) { $i->{class}.= " "; }
        $i->{class} .= "item";
      }
    }
    delete($obj->{items});

    $obj->{_} = [
      _ => $label." ",
      i => { class => "dropdown icon" },
      div => { class => "menu", _ => $items }
    ];
    return;
  }
});
HTML::Obj2HTML::register_extension("icon", {
  tag => "i",
  scalarattr => "class",
  attr => { class => "icon" }
});

HTML::Obj2HTML::register_extension("grid", {
  tag => "div",
  before => sub {
    my $o = shift;
    if (ref $o eq "HASH" && $o->{columns}) {
      if ($o->{class}) { $o->{class} .= " "; }
      $o->{class} .= $semanticnumbers[$o->{columns}]." column";
      delete($o->{columns});
      return "";
    }
  },
  attr => { class => "ui grid" }
});

HTML::Obj2HTML::register_extension("row", {
  tag => "div",
  attr => { class => "row" }
});

HTML::Obj2HTML::register_extension("column", {
  tag => "div",
  before => sub {
    my $o = shift;
    if (ref $o eq "HASH" && $o->{wide}) {
      if ($o->{class}) { $o->{class} .= " "; }
      $o->{class} .= $semanticnumbers[$o->{wide}]." wide";
      delete($o->{wide});
      return "";
    }
  },
  attr => { class => "column" }
});

HTML::Obj2HTML::register_extension("highlightbox", {
  tag => "div",
  attr => { class => "ui yellow message"}
});

1;