package Common::DB::Item::MapFaceFile;

use strict;
use warnings;

use lib '/app/tools/common/lib';
use Common::DB::ItemCollection;
use Common::DB::Item;
use base 'Common::DB::Item';

use constant kTable => 'mapface_file';
use constant kDB    => Common::DB::Item::kCommonDB;

use constant STATUS_NEW       => 1;
use constant STATUS_REVIEW    => 2;
use constant STATUS_COMPLETED => 3;
use constant STATUS_ERROR     => 4;

sub GetAllByStatus {
    my ( $class, %args ) = @_;

    my $status = $args{status};
    my $limit  = $args{limit};
    my $order  = $args{order};

    if ( !$order ) {
        $order = "date_created";
    }

    my $sql = "SELECT * FROM " . kTable . " " . "WHERE status  = '$status' " . "ORDER BY $order DESC";

    if ($limit) {
        $sql .= " LIMIT $limit";
    }

    return $class->GetAll($sql);
}

sub GetAllCompleted {
    my ( $class, %args ) = @_;

    my $startDate = $args{startDate};
    my $endDate   = $args{endDate};

    my $sql = "SELECT * FROM " . kTable . " " . "WHERE status = " . STATUS_COMPLETED . " ";

    if ($startDate) {
        $sql .= "AND date_completed >= \"$startDate\"";
    }

    if ($endDate) {
        $sql .= "AND date_completed <= \"$endDate\"";
    }

    $sql .= "ORDER BY date_completed DESC";

    return $class->GetAll($sql);
}

sub GetAllForMapping {
    my ($class) = @_;

    my $sql = "SELECT * FROM " . kTable . " " . "WHERE status  = " . STATUS_NEW . " OR status = " . STATUS_REVIEW;

    return $class->GetAll($sql);
}

sub DeleteByClientAndFileID {
    my ( $class, $clientID, $fileID ) = @_;

    my $dbo = Common::RSApp::GetCommonDB();

    my $sql = "DELETE FROM " . kTable . " WHERE client_id = $clientID AND file_id = $fileID";

    $dbo->DoCmd($sql);

    return 1;
}

sub GetStatusByClientAndFileID {
    my ( $class, $clientID, $fileID ) = @_;

    my $dbo = Common::RSApp::GetCommonDB();

    my $sql = "SELECT status FROM " . kTable . " WHERE client_id = $clientID AND file_id = $fileID";
    my $sth = $dbo->DoCmd($sql);
    my $hr  = $sth->fetchrow_hashref();
    return $hr->{status};
}

sub GetMapFaceIDByClientAndFileID {
    my ( $class, $clientID, $fileID ) = @_;

    my $dbo = Common::RSApp::GetCommonDB();

    my $sql = "SELECT mapface_file_id FROM " . kTable . " WHERE client_id = $clientID AND file_id = $fileID";

    my $sth = $dbo->DoCmd($sql);
    my $hr  = $sth->fetchrow_hashref();
    return $hr->{mapface_file_id};
}

sub GetByClientAndFileID {
    my ( $class, $clientID, $fileID ) = @_;

    my $sql = "SELECT * FROM " . kTable . " WHERE client_id = $clientID AND file_id = $fileID";

    return $class->GetAll($sql);
}

1;
