#!/usr/bin/perl
#-*-cperl-*-

use strict;

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

use lib '/app/tools/data_classes/lib';
use User::User;

create_new_user();

sub create_new_user {
    print "\nCreate new user...\n\n";

    my $dbo = new Common::RSDB( client_id => 0 );
    my $client_id = getInput("Enter Client ID: ");

  EMAIL:
    my $email = getInput("Enter Email: ");

    # check for email in use
    #
    my $emailCheck = "SELECT * FROM user WHERE email=" . $dbo->DBQuote($email);

    my $sth = $dbo->DoCmd($emailCheck);
    if ( defined $sth && $sth->rows > 0 ) {
        die "Error: email already in use.\n";
    }

    my $first_name = getInput("Enter First Name: ");
    my $last_name  = getInput("Enter Last Name: ");

  ACCESS_LEVEL:
    print "Access Levels:\n";
    print "  1 - RoyaltyShare Admin\n";
    print "  2 - RoyaltyShare Rep\n";
    print "  3 - Client Admin\n";
    print "  4 - Client Rep\n";
    print "  5 - Client User\n";
    my $access_level = getInput("Choose access level (1-5): ");
    chomp($access_level);

    if ( $access_level !~ /^[12345]$/ ) {
        print "Error: Invalid entry, select 1, 2, 3, 4, or 5.\n\n";
        goto ACCESS_LEVEL;
    }

  CONFIRM:
    print "Are you sure you want to create this user? (Y/n) ";
    my $confirm = <STDIN>;
    chomp($confirm);

    if ( $confirm =~ /^y(es)?$/i ) {
        my $dbo = new Common::RSDB( client_id => 0 );

        # create user record
        #
        my $sql =
            "INSERT INTO user SET"
          . " email="
          . $dbo->DBQuote($email)
          . ",first_name="
          . $dbo->DBQuote($first_name)
          . ",last_name="
          . $dbo->DBQuote($last_name)
          . ",date_created=now()";
        if ( $dbo->DoCmd($sql) ) {
            my $user_id = $dbo->LastInsertID;

            # create user access record
            #
            $sql =
                "INSERT INTO user_access SET"
              . " user_id="
              . $user_id
              . ",client_id="
              . $client_id
              . ",access_level="
              . $access_level
              . ",date_created=now()";
            if ( $dbo->DoCmd($sql) ) {
                print "Success! A new user has been created (user_id=$user_id)\n\n";
            } else {
                print "Error: a database error occurred, please contact your administrator.\n";
            }
        } else {
            print "Error: a database error occurred, please contact your administrator.\n";
        }
    } elsif ( $confirm =~ /^n(o)?$/i ) {
        print "No user record created.\n";
    } else {
        goto CONFIRM;
    }

    return 1;
}

sub getInput {
    my $prompt = shift;
    print $prompt;
    my $input = <STDIN>;
    chomp($input);
    return $input;
}

