#!/usr/bin/env perl

use strict;
use warnings;

use Dancer;
use File::Spec;

use Vulcan::OptConf;

$| ++;

my %seco; BEGIN { %seco = Vulcan::OptConf->load()->dump( 'seco' ) }

use lib $seco{lib};
use SECO::Conf;

get "/hostlist/:cluster" => sub
{
    my $output = '';
    if ( my ( $conf, $replica ) = loadconf( params()->{cluster} ) )
    {
        my $i = 1;
        map { $output .= join( ':', $_, $i ++ ) . "\n" }
            $conf->list( host => $replica );
    }
    return $output;
};

get "/seconfig/:cluster" => sub
{
    my $output = '';
    for my $cluster ( split ',', params()->{cluster} )
    {
        next unless my ( $conf, $replica ) = loadconf( $cluster );
        my $i = 1;
        map { $output .= join( ':', @$_, $i ++ ) . "\n" }
            $conf->dump( seco => $replica );
    }
    return $output;
};

dance;

sub loadconf
{
    my $domain = $SECO::DOMAIN;
    my $conf = shift; $conf =~ s/$domain$//;

    return () unless $conf =~ s/(\d+)@/@/;
    eval { $conf = SECO::Conf->load( File::Spec->join( $seco{conf}, $conf ) ) };
    return $@ ? () : ( $conf, $1 );
}
