package CyberLaw;
require Exporter;
@EXPORT = qw/dbhandle fields insert_data create_form/;
@ISA = qw(Exporter);

use DBI;
use strict;
use warnings;
use File::Basename;
use CGI::FormBuilder;
use Data::Dumper;


sub dbhandle{
    if(-e 'data/cyberlaw.sqlite3'){
        my $dbh = DBI->connect("dbi:SQLite:dbname=data/cyberlaw.sqlite3","","", {RaiseError => 1}) or die($DBI::errstr);
        return $dbh;
    } else {
        my $dbh = DBI->connect("dbi:SQLite:dbname=data/cyberlaw.sqlite3","","", {RaiseError => 1}) or die($DBI::errstr);
        create_tables($dbh);
        return $dbh;
    }
}

sub fields{
    ['first_name', 'last_name', 'email', 'phone', 'year' ,'in_cambridge', 'blog' ,'website', 'related_courses', 'tech_skills', 'statement','resume'];
}

sub create_tables{
    my $dbh = shift;
    my $fields = fields();
    my $columns = join(',', map{"$_ TEXT"} @$fields);
    my $create_statement = "CREATE TABLE IF NOT EXISTS applications(id INTEGER PRIMARY KEY AUTOINCREMENT, $columns)";
    #warn('Create table :' . $create_statement);
    $dbh->do($create_statement);
}

sub insert_data{
    my %p = @_;
    my $dbh = $p{'dbh'};
    my $form = $p{'form'};

    if($form->cgi_param("can_has_javascriptz")){
        my $fields = fields();
        my $fields_sql = join(',', @$fields);
        my $placeholders = join(',', map {"?"} @$fields);
        my @values = map{$form->cgi_param($_) || ''} @$fields;
        my $insert_statement = "insert into applications($fields_sql) values($placeholders)";
        #warn('insert statement: ' . $insert_statement);
        #warn('parameters:' . Dumper(\@values));
        $dbh->do($insert_statement,{},(@values));
        my $id = $dbh->func('last_insert_rowid');

        my $file = $form->field('resume');
        my $resume_name = $form->cgi_param('resume');
        my $extension;
        if($resume_name =~ m/[^\.]+\.([^\.]+)$/){
            $extension = $1;
            $extension =~ s/[^a-z\d]//gis;
        }

        open F, "> data/$id.$extension" or die $!;
        while (<$file>) {
            print F;
        }
        close F;

        $dbh->do('update applications set resume = ? where id = ?', {}, ("$id.$extension",$id)); 
    }
    return;
}

sub create_form{

    my $form = CGI::FormBuilder->new(
        template => 'templates/cyberlaw_clinic.tmpl',
        method  => 'post',
        name    => 'Cyberlaw: Difficult Problems',
        enctype => 'multipart/form-data',
        fields => fields(),
        validate => {
            first_name => 'FNAME',
            last_name  => 'LNAME',
            email      => 'EMAIL',
        }
    );

    $form->tmpl_param('generated_form' => 1);
    $form->field(
        name => 'phone',
        required => 1,
        validate => 'PHONE',
    );
    $form->field(
        name => 'year',
        options => [qw(1L 2L Other)],
    );
    $form->field(
        name => 'in_cambridge',
        options => [qw(Yes)],
    );
    $form->field(
        name => 'blog',
        size => '50',
    );
    $form->field(
        name => 'website',
        size => '50',
    );
    $form->field(
        name => 'related_courses',
        type => 'textarea',
        required => 1,
        cols => '50',
        rows => '5',
    );
    $form->field(
        name => 'tech_skills',
        type => 'textarea',
        required => 1,
        cols => '50',
        rows => '5',
    );
    $form->field(
        name => 'statement',
        type => 'textarea',
        required => 1,
        cols => '50',
        rows => '5',
    );
    $form->field(
        name => 'resume',
        type => 'file',
        required => 1
    );
    return $form;
}



1;
