package AppUser::Login::Command::MFASendEmailCode;

use strict;
use warnings;
use URI::Escape;

use lib '/app/tools/appuser/lib';
use AppUser::Login::MFAConfigForm;
use AppUser::DB::Item::User;
use AppUser::DB::Item::UserToken;

use lib '/app/tools/common/lib';
use RSApache::Response::Redirect;
use RSApache::Response::XSLT;
use Common::RSApp;
use Common::MFA::Util;
use RSApache::RSWebApp;
use RSApache::Command;

use base 'RSApache::Command';

sub cmd  { return "scode"; }
sub area { return "login"; }
sub app  { return "rps"; }

use constant kTemplate => '/app/tools/appuser/templates/mfa.xsl';

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

    my $form;
    my $response;
    my $redirect = uri_unescape( $self->getParam("redirect") );
    my $email    = uri_unescape( $self->getParam("email") );
    my $cmd      = $self->getParam("c");
    my $token    = $self->getParam("token");

    if( $email ) {

        # Get the user token
        my $userToken = AppUser::DB::Item::UserToken->Lookup( email => $email );
        if ( $userToken && $userToken->token eq $token ) {
            # send MFA code to user's email
            Common::MFA::Util->sendMFAPassword( email => $email );

            my $mfaType = AppUser::DB::Item::User::kMFATypeEmail;
            my $_email  = uri_escape($email);
            my $uri     = "/rps/login?c=auth&email=$_email&token=$token&mtype=$mfaType";

            $self->{xml}{Redirect} = $uri;
        } else {
            $self->{xml}{BadToken} = 1;
        }
    }

    if ( $self->getParam('submit') ) {
        $response = RSApache::Response::Redirect->new($redirect);
    }

    if ( !$response ) {
        $self->{xml}{Form}         = $form;
        $self->{xml}{Email}        = $self->getParam("email");
        $self->{xml}{DisplayEmail} = $email;
        $self->{xml}{EmailSent}    = 1;

        $response = RSApache::Response::XSLT->new( $self->{xml}, kTemplate );
    }

    return $response;
}

1;
