package MediaServe::WebService::Command::AssetSave;
use strict;
use warnings;

use MediaServe::MediaFile;
use MediaServe::Server;

use lib '/app/tools/common/lib';
use base 'RSApache::Command::InternalCommand';
use Common::Assert;
use RSApache::Response::XML;

sub cmd  { return 'save'; }
sub area { return 'assetmgmt'; }

sub execute {
    my ($self) = @_;

    my $response = $self->SUPER::execute();
    return $response if $response;

    my $clientID = $self->getParam('client_id');
    my $type     = lc $self->getParam('type');
    my $content  = { Errors => 0 };

    assert($clientID);
    assert($type);

    if ( $type eq 'audio' ) {
        my $sessionID = lc $self->getParam('session_id');
        my $itemCount = $self->getParam('item_count');
        assert($sessionID);
        assert($itemCount);
        $content->{Track} = [];

        for ( my $i = 0 ; $i < $itemCount ; $i++ ) {
            my $trackName        = $self->getParam( 'file_name_' . $i );
            my $prodTrackFileObj = MediaServe::MediaFile->addProductTrackFile(
                session_id => $sessionID,
                filename   => $trackName,
                overwrite  => 0,
            );
            my %result = ( TrackName => $trackName );

            if ( ref $prodTrackFileObj ) {
                my $mediaFileID = $prodTrackFileObj->media_file_id();
                my ( $hostName, $absPath ) = MediaServe::Server::GetAudioPath(
                    clientID    => $clientID,
                    mediaFileID => $mediaFileID,
                );

                $result{HostName}    = $hostName;
                $result{AbsPath}     = $absPath;
                $result{MediaFileID} = $mediaFileID;
            } else {
                $content->{Errors}++;
                $result{Error} = 'failed to get product_track_file obj';
            }

            push( @{ $content->{Track} }, \%result );
        }
    } elsif ( $type eq 'image' ) {
        my $imgName      = $self->getParam('file_name_0');
        my $albumFileObj = MediaServe::MediaFile->addAlbumFile(
            type      => $self->getParam('file_type_0'),
            filename  => $imgName,
            overwrite => 0,
        );
        if ( ref $albumFileObj ) {
            my $mediaFileID = $albumFileObj->media_file_id();
            my ( $hostName, $absPath ) = MediaServe::Server::GetImagePath(
                clientID    => $clientID,
                mediaFileID => $mediaFileID,
            );
            $content->{Image} = {
                FileName    => $imgName,
                HostName    => $hostName,
                AbsPath     => $absPath,
                MediaFileID => $mediaFileID,
            };
        } else {
            $content->{Errors} = 1;
            $content->{Image}  = {
                FileName => $imgName,
                Error    => 'failed to get album_file obj',
            };
        }
    } else {
        die "unknown type ($type)\n";
    }

    return RSApache::Response::XML->new($content);
}

1;
