#!/usr/bin/env perl

#
# Copy stack inputs to the current directory
#

use warnings;
use strict;

use DBI;
use constant DB_SOCKET => '/var/run/mysqld/mysqld.sock'; # Socket for mysql
use Getopt::Long qw( GetOptions :config auto_help auto_version gnu_getopt );

use constant EXTENSIONS => { 'IMAGE' => '.fits', # Image
                             'MASK' => '.mask.fits', # Mask
                             'WEIGHT' => '.wt.fits', # Weight
                             'SOURCES' => '.cmf', # Sources
                             'LOG' => '.log', # Log file
                             'STATS' => '.stats', # Statistics file
                             'B1' => '.b1.jpg', # Binned jpeg
                             'B2' => '.b2.jpg', # Binned jpeg
                         };

my ($db_host, $db_name, $db_user, $db_pw); # Database details
my ($stack_id);                  # Stack of interest
my ($input);                    # Input list

GetOptions(
           'dbhost=s' => \$db_host, # Database host name
           'dbname=s' => \$db_name, # Database name
           'dbuser=s' => \$db_user, # Database user
           'dbpass=s' => \$db_pw, # Database p/w
           'stack_id=s' => \$stack_id, # Stack identifier
           ) or die "Unable to parse arguments.\n";
die "Unknown option: @ARGV\n" if @ARGV;
die "Required options: --dbhost --dbname --dbuser --dbpass --stack_id\n"
    unless defined $db_host
    and defined $db_name
    and defined $db_user
    and defined $db_pw
    and defined $stack_id;

# Database connection
my $db = DBI->connect( "DBI:mysql:database=$db_name;host=$db_host;mysql_socket=" . DB_SOCKET(),
                       $db_user,
                       $db_pw,
                       { RaiseError => 1, AutoCommit => 1 }
                       ) or die "Unable to connect to database: $DBI::errstr";

# Query to run
my $sql = "SELECT path_base FROM stackSumSkyfile WHERE stack_id = $stack_id";

# List of stacks
my $stacks = $db->selectcol_arrayref( $sql,
                                     { Columns => [1] }
                                     ) or die "Unable to execute SQL: $DBI::errstr";

foreach my $stack ( @$stacks ) {
    copy_extensions( $stack, EXTENSIONS() );
}

# Pau.


sub copy_extensions
{
    my $path = shift;           # Path to copy
    my $extensions = shift;     # Extensions structure

    foreach my $type ( keys %$extensions ) {
        my $ext = $$extensions{$type}; # Extension
        my $neb = "$path$ext"; # Nebulous file
        my $source = `neb-locate --path $neb` or die "Unable to locate $neb\n"; # Actual file
        chomp $source;
        my ($target) = $source =~ m|^.*:(.*)|; # Target name
        !system "cp $source $target" or die "Unable to copy $source\n";
    }
}
