#!/usr/local/bin/perl -w

use strict;
use CGI qw(:standard);
use Gramene::DB;

my $log_file = "/tmp/survey_log";
open( LOG, ">>$log_file" ) || die "cannot open $log_file for appending: $!";
print LOG ( "\n\n", "*" x 40, "\n" );

my $time = getCurrentTime();
print LOG ( $time, "\n" );

my $q     = CGI->new();
my $title = "Feedback";

print $q->header('text/html'), 
  $q->start_html($title),
  $q->h1( { -align => 'center' }, "Thank you !" ), 
  $q->hr, 
  $q->p(
    q[
        Thank you very much for taking our survey. It is important for 
        us to improve the Gramene website.
    ]
  ),
  $q->p(
    $q->i(
        "Click the link to go to the ",
        a( { -href => 'http://www.gramene.org' }, "Gramene website" ),
        " ."
    )
  ),
  $q->end_html;

eval {
    my $dbh = Gramene::DB->new('survey');
    my $sth = $dbh->prepare('SELECT max(usrid) from survey_usrinfo')
      or die "Can't prepare statement: " . $dbh->errstr;
    $sth->execute();
    my $usrID = $sth->fetchrow_array();
    $sth->finish();
    $usrID = 0 unless $usrID;
    $usrID++;
    print LOG ("usr ID= $usrID\n");

    &save_UsrInfo( $q, $dbh, $usrID );
    &save_Tool( $q, $dbh, $usrID );
    &save_Info( $q, $dbh, $usrID );
};

if ($@) {
    print LOG ("Unable to save to database: $@\n");
    warn "Unable to save to database: $@\n";
}

print LOG ("Save information to database successfully.\n");

close(LOG) or die "can't close logfile: $!";

sub save_UsrInfo {
    my ( $q, $dbh, $usrID ) = @_;

    # print "usrinfo id=$usrID ";
    my $usrInfo_str = 'INSERT INTO SURVEY_USRINFO VALUES(?,?,?,?,?,?,?)';
    my $usrInfo_sth = $dbh->prepare($usrInfo_str)
      or die "Can't prepare statement: " . $dbh->errstr;

    my $year = $q->param('access_year');
    $year = '' unless ( defined $year );

    my $frequency = $q->param('access_frequency');
    $frequency = '' unless defined $frequency;

    my $org_type = $q->param('org_type');
    $org_type = '' unless defined $org_type;

    my $position = $q->param('position');
    $position = '' unless defined $position;

    my $mail = $q->param('email');
    $mail = '' unless defined $mail;

    my $suggest = $q->param('Other_sugestions');
    $suggest = '' unless defined $suggest;

    $usrInfo_sth->bind_param( 1, $usrID );
    $usrInfo_sth->bind_param( 2, $year );
    $usrInfo_sth->bind_param( 3, $frequency );
    $usrInfo_sth->bind_param( 4, $org_type );
    $usrInfo_sth->bind_param( 5, $position );
    $usrInfo_sth->bind_param( 6, $mail );
    $usrInfo_sth->bind_param( 7, $suggest );

    $usrInfo_sth->execute();
    $usrInfo_sth->finish();
}

sub save_Info {
    my ( $q, $dbh, $usrID ) = @_;

    # print "info id=$usrID ";
    my $count = 22;
    my $str   = '(';
    my $i;
    for ( $i = 1 ; $i < $count ; $i++ ) {
        $str .= '?,';
    }
    $str .= '?)';

    my $info_str = 'INSERT INTO SURVEY_INFO VALUES' . $str;
    my $info_sth = $dbh->prepare($info_str)
      or die "Can't prepare statement: " . $dbh->errstr;

    my @vals;
    push @vals, $usrID;

    my $v1 = $q->param('rc_gen_seq');
    $v1 = 0 unless ( defined $v1 );
    push @vals, $v1;

    my $v2 = $q->param('rc_gen_predict');
    $v2 = 0 unless ( defined $v2 );
    push @vals, $v2;

    my $v3 = $q->param('gen_cmp_rc');
    $v3 = 0 unless ( defined $v3 );
    push @vals, $v3;

    my $v4 = $q->param('gen_cmp_oth');
    $v4 = 0 unless ( defined $v4 );
    push @vals, $v4;

    my $v5 = $q->param('rc_snp');
    $v5 = 0 unless ( defined $v5 );
    push @vals, $v5;

    my $v6 = $q->param('oth_snp');
    $v6 = 0 unless ( defined $v6 );
    push @vals, $v6;

    my $v7 = $q->param('rc_est');
    $v7 = 0 unless ( defined $v7 );
    push @vals, $v7;

    my $v8 = $q->param('oth_est');
    $v8 = 0 unless ( defined $v8 );
    push @vals, $v8;

    my $v9 = $q->param('prot_func_info');
    $v9 = 0 unless ( defined $v9 );
    push @vals, $v9;

    my $v10 = $q->param('prot_phylo_info');
    $v10 = 0 unless ( defined $v10 );
    push @vals, $v10;

    my $v11 = $q->param('rc_mut_info');
    $v11 = 0 unless ( defined $v11 );
    push @vals, $v11;

    my $v12 = $q->param('rc_qtl_info');
    $v12 = 0 unless ( defined $v12 );
    push @vals, $v12;

    my $v13 = $q->param('oth_mut_qtl');
    $v13 = 0 unless ( defined $v13 );
    push @vals, $v13;

    my $v14 = $q->param('rc_gen_map');
    $v14 = 0 unless ( defined $v14 );
    push @vals, $v14;

    my $v15 = $q->param('rc_physic_map');
    $v15 = 0 unless ( defined $v15 );
    push @vals, $v15;

    my $v16 = $q->param('oth_map');
    $v16 = 0 unless ( defined $v16 );
    push @vals, $v16;

    my $v17 = $q->param('gen_marker');
    $v17 = 0 unless ( defined $v17 );
    push @vals, $v17;

    my $v18 = $q->param('aval_clone_reagen');
    $v18 = 0 unless ( defined $v18 );
    push @vals, $v18;

    my $v19 = $q->param('aval_germ_strain');
    $v19 = 0 unless ( defined $v19 );
    push @vals, $v19;

    my $v20 = $q->param('dicots');
    $v20 = 0 unless ( defined $v20 );
    push @vals, $v20;

    my $suggest = $q->param('data_suggestions');
    $suggest = '' unless defined $suggest;

    push @vals, $suggest;

    for ( $i = 1 ; $i <= $count ; $i++ ) {
        $info_sth->bind_param( $i, ( shift @vals ) );
    }

    $info_sth->execute();
    $info_sth->finish();
}

sub save_Tool {
    my ( $q, $dbh, $usrID ) = @_;

    # print "tool id=$usrID ";
    my $count = 10;
    my $str   = '(';
    my $i;

    for ( $i = 1 ; $i < $count ; $i++ ) {
        $str .= '?,';
    }
    $str .= '?)';

    my $tool_str = 'INSERT INTO SURVEY_TOOL VALUES' . $str;
    my $tool_sth = $dbh->prepare($tool_str)
      or die "Can't prepare statement: " . $dbh->errstr;

    my @vals;
    push @vals, $usrID;

    my $brow = $q->param('t_brow');
    $brow = 0 unless ( defined $brow );
    push @vals, $brow;

    my $blast = $q->param('t_blast');
    $blast = 0 unless ( defined $blast );
    push @vals, $blast;

    my $map = $q->param('t_map');
    $map = 0 unless ( defined $map );
    push @vals, $map;

    my $marker = $q->param('t_marker');
    $marker = 0 unless ( defined $marker );
    push @vals, $marker;

    my $prot = $q->param('t_prot');
    $prot = 0 unless ( defined $prot );
    push @vals, $prot;

    my $onto = $q->param('t_onto');
    $onto = 0 unless ( defined $onto );
    push @vals, $onto;

    my $pheno = $q->param('t_pheno');
    $pheno = 0 unless ( defined $pheno );
    push @vals, $pheno;

    my $litera = $q->param('t_litera');
    $litera = 0 unless ( defined $litera );
    push @vals, $litera;

    my $suggest = $q->param('tool_sugestions');
    $suggest = '' unless defined $suggest;
    push @vals, $suggest;

    for ( $i = 1 ; $i <= $count ; $i++ ) {
        $tool_sth->bind_param( $i, ( shift @vals ) );
    }

    $tool_sth->execute();
    $tool_sth->finish();

}

sub getCurrentTime {
    my ( $sec, $min, $hour, $mday, $mon, $year, $other ) = localtime;

    $sec  = "0" . $sec  if $sec < 10;
    $min  = "0" . $min  if $min < 10;
    $hour = "0" . $hour if $hour < 10;
    $mday = "0" . $mday if $mday < 10;
    $mon += 1;
    $mon  = "0" . $mon if $mon < 10;
    $year = $year % 100;
    $year = "0" . $year if $year < 10;

    return "$year/$mon/$mday\t$hour:$min:$sec";
}
