#!/usr/bin/perl

#use utf8;
use strict;
use CGI;

use Opals::Template qw(
    tmpl_read
    tmpl_write
);

my $dbh = Opals::Context->dbh();
END { $dbh->disconnect(); }

my $cgi = CGI->new;
my $input = $cgi->Vars();
my ($permission, $cookie, $template) = tmpl_read(
        {
            dbh             => $dbh,
            cgi             => $cgi,
            tmplFile        => 'util/file.tmpl',
            reqPermission   => 'pref_edit',
        }
);

my $op          = $input->{'op'};
my $fileType    = $input->{'fileType'};
my $fileName    = $input->{'fileName'};

if ($op =~ m/^set$/i) {
    my $fileExtension = $input->{'fileData'};
    $fileExtension =~ s/.*\.([\w\-]+)$/$1/;
    $fileExtension = lc($fileExtension);
    my $fileHandle = $cgi->param('fileData');
    
    my $fileData = '';
    while (<$fileHandle>) {
        $fileData .= $_;
    }

    my $rv = setFile($dbh, $fileType, $fileName, $fileExtension, $fileData);
    $template->param(
        "op_$op"    => 1,
        op_result   => $rv,
    );
}
elsif ($op =~ m/^default$/i) {
    useDefaultFile($dbh, $fileType, $fileName);
}

my @typeList = listFile($dbh);
$template->param(
    typeList => \@typeList,
);


$template->param(hlpUrl     => Opals::Constant->getHlpUrl('file') );
#if ($permission && $permission->{'marc_edit'}) { $template->param(marc_edit => 1); }
tmpl_write($dbh, $cgi, $cookie, $template);
#$dbh->disconnect();
################################################################################


sub listFile {
    my ($dbh) = @_;

    my $sth_type = $dbh->prepare(<<_STH_);
select  distinct fileType
from    opl_file
order by fileType
_STH_
    my $sth_name = $dbh->prepare(<<_STH_);
select  fileName
from    opl_file
where   fileType = ?
order by fileName
_STH_

    $sth_type->execute();
    my @typeList;
    while (my $fType = $sth_type->fetchrow_hashref) {
        $sth_name->execute($fType->{'fileType'});
        my @fileName;
        while (my $fName = $sth_name->fetchrow_hashref) {
            $fName->{'fileType'} = $fType->{'fileType'};
            push @fileName, $fName;
        }
        $fType->{'nameList'} = \@fileName;
        push @typeList, $fType;
    }
    $sth_type->finish;
    $sth_name->finish;

    return @typeList;
}
############################################################


sub setFile {
    my ($dbh, $fileType, $fileName, $fileExtension, $fileData) = @_;
    my $mimeType = listMimeTypes();

    if (! $mimeType->{$fileExtension} ||
        $mimeType->{$fileExtension} !~ m/^$fileType\//) {
        return;
    }

    my $sth = $dbh->prepare(<<_STH_);
update  opl_file
set     mimeType = ?,
        fileData = ?
where   fileType = ? &&
        fileName = ?
_STH_

    $sth->execute($mimeType->{$fileExtension}, $fileData, $fileType, $fileName);
    $sth->finish;

    return 1;
}
############################################################


sub useDefaultFile {
    my ($dbh, $fileType, $fileName) = @_;
    my $sth = $dbh->prepare(<<_STH_);
update  opl_file
set     mimeType = '',
        fileData = ''
where   fileType = ? &&
        fileName = ?
_STH_

    $sth->execute($fileType, $fileName);
    $sth->finish;
}
############################################################


sub listMimeTypes {
    return {
        'aif'       => 'audio/aiff',
        'aif'       => 'audio/x-aiff',
#        'aifc'      => 'audio/aiff',
        'aifc'      => 'audio/x-aiff',
#        'aiff'      => 'audio/aiff',
        'aiff'      => 'audio/x-aiff',
        'art'       => 'image/x-jg',
#        'au'        => 'audio/basic',
        'au'        => 'audio/x-au',
        'bm'        => 'image/bmp',
#        'bmp'       => 'image/bmp',
        'bmp'       => 'image/x-windows-bmp',
#        'dwg'       => 'image/vnd.dwg',
        'dwg'       => 'image/x-dwg',
#        'dxf'       => 'image/vnd.dwg',
        'dxf'       => 'image/x-dwg',
        'fif'       => 'image/fif',
        'flo'       => 'image/florian',
        'fpx'       => 'image/vnd.fpx',
#        'fpx'       => 'image/vnd.net-fpx',
        'funk'      => 'audio/make',
        'g3'        => 'image/g3fax',
        'gif'       => 'image/gif',
        'gsd'       => 'audio/x-gsm',
        'gsm'       => 'audio/x-gsm',
        'ico'       => 'image/x-icon',
        'ief'       => 'image/ief',
        'iefs'      => 'image/ief',
        'it'        => 'audio/it',
        'jam'       => 'audio/x-jam',
        'jfif'      => 'image/jpeg',
#        'jfif'      => 'image/pjpeg',
        'jfif-tbnl' => 'image/jpeg',
        'jpeg'      => 'image/jpeg',
#        'jpeg'      => 'image/pjpeg',
        'jpe'       => 'image/jpeg',
#        'jpe'       => 'image/pjpeg',
        'jpg'       => 'image/jpeg',
#        'jpg'       => 'image/pjpeg',
        'jps'       => 'image/x-jps',
        'jut'       => 'image/jutvision',
        'kar'       => 'audio/midi',
#        'la'        => 'audio/nspaudio',
        'la'        => 'audio/x-nspaudio',
        'lam'       => 'audio/x-liveaudio',
#        'lma'       => 'audio/nspaudio',
        'lma'       => 'audio/x-nspaudio',
        'm2a'       => 'audio/mpeg',
        'm3u'       => 'audio/x-mpequrl',
        'mcf'       => 'image/vasa',
#        'mid'       => 'audio/midi',
#        'mid'       => 'audio/x-mid',
        'mid'       => 'audio/x-midi',
#        'midi'      => 'audio/midi',
#        'midi'      => 'audio/x-mid',
        'midi'      => 'audio/x-midi',
        'mjf'       => 'audio/x-vnd.audioexplosion.mjuicemediafile',
#        'mod'       => 'audio/mod',
        'mod'       => 'audio/x-mod',
#        'mp2'       => 'audio/mpeg',
        'mp2'       => 'audio/x-mpeg',
#        'mp3'       => 'audio/mpeg3',
        'mp3'       => 'audio/x-mpeg-3',
        'mpa'       => 'audio/mpeg',
        'mpga'      => 'audio/mpeg',
        'mpg'       => 'audio/mpeg',
        'my'        => 'audio/make',
        'nap'       => 'image/naplps',
        'naplps'    => 'image/naplps',
        'niff'      => 'image/x-niff',
        'nif'       => 'image/x-niff',
        'pbm'       => 'image/x-portable-bitmap',
        'pct'       => 'image/x-pict',
        'pcx'       => 'image/x-pcx',
#        'pfunk'     => 'audio/make',
        'pfunk'     => 'audio/make.my.funk',
#        'pgm'       => 'image/x-portable-graymap',
        'pgm'       => 'image/x-portable-greymap',
        'pic'       => 'image/pict',
        'pict'      => 'image/pict',
        'pm'        => 'image/x-xpixmap',
        'png'       => 'image/png',
        'pnm'       => 'image/x-portable-anymap',
        'ppm'       => 'image/x-portable-pixmap',
        'qcp'       => 'audio/vnd.qcelp',
        'qif'       => 'image/x-quicktime',
        'qtif'      => 'image/x-quicktime',
        'qti'       => 'image/x-quicktime',
#        'ra'        => 'audio/x-pn-realaudio',
#        'ra'        => 'audio/x-pn-realaudio-plugin',
        'ra'        => 'audio/x-realaudio',
        'ram'       => 'audio/x-pn-realaudio',
        'ras'       => 'image/cmu-raster',
        'ras'       => 'image/x-cmu-raster',
#        'rast'      => 'image/cmu-raster',
        'rf'        => 'image/vnd.rn-realflash',
        'rgb'       => 'image/x-rgb',
        'rm'        => 'audio/x-pn-realaudio',
        'rmi'       => 'audio/mid',
        'rmm'       => 'audio/x-pn-realaudio',
        'rmp'       => 'audio/x-pn-realaudio',
#        'rmp'       => 'audio/x-pn-realaudio-plugin',
        'rp'        => 'image/vnd.rn-realpix',
        'rpm'       => 'audio/x-pn-realaudio-plugin',
        's3m'       => 'audio/s3m',
        'sid'       => 'audio/x-psid',
#        'snd'       => 'audio/basic',
        'snd'       => 'audio/x-adpcm',
#        'svf'       => 'image/vnd.dwg',
        'svf'       => 'image/x-dwg',
#        'tiff'      => 'image/tiff',
        'tiff'      => 'image/x-tiff',
#        'tif'       => 'image/tiff',
        'tif'       => 'image/x-tiff',
        'tsi'       => 'audio/tsp-audio',
        'tsp'       => 'audio/tsplayer',
        'turbot'    => 'image/florian',
#        'voc'       => 'audio/voc',
        'voc'       => 'audio/x-voc',
#        'vox'       => 'audio/voxware',
        'vqe'       => 'audio/x-twinvq-plugin',
        'vqf'       => 'audio/x-twinvq',
        'vql'       => 'audio/x-twinvq-plugin',
#        'wav'       => 'audio/wav',
        'wav'       => 'audio/x-wav',
        'wbmp'      => 'image/vnd.wap.wbmp',
#        'xbm'       => 'image/xbm',
        'xbm'       => 'image/x-xbitmap',
#        'xbm'       => 'image/x-xbm',
        'xif'       => 'image/vnd.xiff',
        'xm'        => 'audio/xm',
#        'xpm'       => 'image/xpm',
        'xpm'       => 'image/x-xpixmap',
        'x-png'     => 'image/png',
#        'xwd'       => 'image/x-xwd',
        'xwd'       => 'image/x-xwindowdump',
    };
}
