#!/usr/bin/perl

use strict;

use lib 'd:/app/tools/appuser/lib';
use lib 'd:/app/tools/common/lib';
use lib 'd:/app/tools/data_classes/lib';
use lib 'd:/app/tools/distribution/lib';
use lib 'd:/app/tools/job/lib';
use lib 'd:/app/tools/mediaserve/lib';
use lib 'd:/app/tools/metadata/lib';
use lib 'd:/app/tools/rps/lib';
use lib 'd:/app/tools/sysadmin/lib';

use Getopt::Std;

sub usage {
    print STDERR "\nusage: $0 -c <client_id> -s <service_id> -j <distribution_process_id> [-w custom_write_path] [-x] [-d]\n";
}

MAIN: {
    my %opt;
    getopts( 'c:s:j:w:xdv', \%opt );

    unless ( $opt{c} =~ m/^\d+$/ && $opt{s} =~ m/^\d+$/ && $opt{j} =~ m/^\d+$/ ) {
        usage();
        exit(1);
    }

    my $clientID      = $opt{c};
    my $serviceID     = $opt{s};
    my $distProcessID = $opt{j};
    my $debug         = $opt{d};

    my $packager = new Packager(
        client_id               => $opt{c},
        service_id              => $opt{s},
        distribution_process_id => $opt{j},
        custom_write_path       => $opt{w},
        no_delivery             => $opt{x},
        debug                   => $opt{d},
        verbose                 => $opt{v}
    );

    $packager->run();
}

package Packager;

use lib '/app/tools/distribution/lib';
use Distribution::Service;

use lib '/app/tools/common/lib';
use Common::Assert;

use base 'Common::Script';

sub _init {
    my $self = shift;
    my %args = @_;

    $self->SUPER::_init(@_);

    $self->{_distribution_process_id} = $args{distribution_process_id};
    $self->{_service_id}              = $args{service_id};
    $self->{_custom_write_path}       = $args{custom_write_path};
    $self->{_no_delivery}             = $args{no_delivery};

    assert( $self->{_client_id} );
    assert( $self->{_service_id} );
    assert( $self->{_distribution_process_id} );

    # Turn on debugging
    if ( $self->{_debug} ) { $ENV{DEV_SERVER} = 1; }

    return $self;
}

sub _process {
    my $self = shift;

    my $pkg = Distribution::Service::get_packager( $self->{_service_id} );

    Common::Log::Debug("Starting audio packaging using '$pkg'");

    eval "require $pkg";
    die "oops, can't require $pkg: $@\n" if $@;

    my $packager = $pkg->new(
        client_id               => $self->{_client_id},
        service_id              => $self->{_service_id},
        custom_write_path       => $self->{_custom_write_path},
        no_delivery             => $self->{_no_delivery},
        distribution_process_id => $self->{_distribution_process_id}
    );

    exit(2) unless ( $packager && $packager->run() );
}

1;
