package Smolder::Util;
use Smolder::Conf qw(HostName UrlBase Port);
use strict;
use warnings;

=head1 NAME

Smolder::Util

=head1 DESCRIPTION 

Collection of various useful routines for Smolder

=head1 ROUTINES

=head2 pass_fail_color

Given a ratio, will return an RRGGBB color suitable for a web page
as a visual indicator of a test's success. Green == 100%, Red == 0%.

=cut

# adapted from Test::TAP::Model::Visual
sub pass_fail_color {
    my $ratio = shift;

    # handle percentages
    $ratio = $ratio / 100 if $ratio > 1;
    my @start_color = ('255', '00',  '00');    # ff0000
    my @end_color   = ('00',  '255', '00');    # 00ff00
    my @color_pieces;

    if ($ratio == 1) {
        @color_pieces = @end_color;
    } elsif ($ratio == 0) {
        @color_pieces = @start_color;
    } else {
        @color_pieces = ('255', 100 + ((255 - 100) * $ratio), 100 - 20,);
    }
    return sprintf('%02x%02x%02x', @color_pieces);
}

=head2 format_time

Given a number of seconds, format it as string of the format
C<HH:MM:SS> or C<MM:SS> or C<SS>.

    Smolder::Util::format_time(1000); # prints 16:40
    Smolder::Util::format_time(35);   # prints 35
    Smolder::Util::format_time(100);  # prints 1:40

=cut

sub format_time {
    my $secs = shift;
    return $secs if $secs < 60;
    my $hour = int($secs / 3600);
    my $min  = int(($secs % 3600) / 60);
    my $sec  = $secs % 60;
    if ($hour) {
        return sprintf('%i:%02i:%02i', $hour, $min, $sec);
    } elsif ($min) {
        return sprintf('%i:%02i', $min, $sec);
    }
}

=head2 url_base

This method will return either the base url for the installed version of
Smolder or the value of the UrlBase configuration option. UrlBase
is useful for configurations where Smolder is hosted behind a proxy.

=cut

{
    my $_base;
    if (UrlBase) {
        $_base = UrlBase;
    }
    else {
        $_base = 'http://' . HostName . (Port == 80 ? '' : ':' . Port);
    }
    sub url_base { $_base }
}

1;

