package DomainDiscussionsManager;

use strict;
use warnings;

use DBI;
use Digest::MD5 qw(md5 md5_hex md5_base64);
use DateTime;

use lib qw(Core);

use Database;
use TargetsManager;
use PDBUtils;

use Configuration;

my $domain_discussions_manager = undef;

sub new {
    my ($class) = @_;
    
    return $domain_discussions_manager if(defined($domain_discussions_manager));
    
    my $self = {
        _database => Database->new($CONFIG->{HOSTNAME}, $CONFIG->{PORT}, $CONFIG->{DATABASE}, $CONFIG->{USERNAME}, $CONFIG->{PASSWORD})
    };
    
    $domain_discussions_manager = bless $self, $class;
    return $domain_discussions_manager;
}

sub add {
    my ($self, $target_id, $account_id, $comment) = @_;
    
    my $result = 0;
    
    my $query = sprintf("INSERT INTO casp13.domain_discussions (targets_id, accounts_id, comment) VALUES (%d, %d, '%s')",
                        $target_id, $account_id, quotemeta($comment));
    my $sth = $self->{_database}->query($query);
    
    if(defined($sth)) {
        my $query = sprintf("SELECT MAX(id) FROM casp13.domain_discussions");
        my $sth = $self->{_database}->query($query);
        # add logger
        ($result) = $sth->fetchrow_array();
    }
    
    return $result;
}

sub delete {
    my ($self, $id) = @_;
    
    my $result = 0;
    
    return $result if(! $self->exist($id));
    
    my $query = sprintf("DELETE FROM casp13.domain_discussions WHERE (id = %d)", $id);
    my $sth = $self->{_database}->query($query);
    
    if(defined($sth)) {
        # add logger
        $result = defined($sth) ? 1 : 0;
    }
    
    return $result;
}

sub domain_discussions {
    my ($self, $target_id, $field, $order) = @_;
    
    $field = (!defined($field) || ($field eq '')) ? 'dd.date' : $field;
    $order = (!defined($order) || ($order eq '')) ? 'ASC' : $order;
    
    my @comments = ();
    
    my $query = sprintf("SELECT dd.id, dd.comment, dd.date, a.firstname, a.lastname FROM casp13.domain_discussions dd JOIN public.accounts a ON (dd.accounts_id = a.id) WHERE (dd.targets_id = %d) ORDER BY %s %s", $target_id, $field, $order);
    my $sth = $self->{_database}->query($query);
    
    if(defined($sth) && ($sth->rows() > 0)) {
        my $index = 1;
        while(my($id, $comment, $date, $firstname, $lastname) = $sth->fetchrow_array()) {
            my $html_formated_comment = $comment;
            $html_formated_comment =~ s/\n/<br>/g;
            push(@comments, {
                    INDEX => $index,
                    ID => $id,
                    COMMENT => $comment,
                    HTML_FORMATED_COMMENT => $html_formated_comment,
                    DATE => substr($date, 0, 16),
                    FIRSTNAME => $firstname,
                    LASTNAME => $lastname
            	}
            );
            $index++;
        }
    }
    
    return @comments;
}

1;