#------------------------------------------------------------
# Copyright (C) 2009 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package Support::BookPub::Command::POSFeed;
use strict;
use warnings;
use Data::Dumper;

use lib '/app/tools/common/lib';
use RSApache::Response::XSLT;
use Common::DB::Item::Client;
use Common::Preference;
use Common::Util;

use lib '/app/tools/bookpub/lib';
use lib '/app/tools/support/lib';
use Support::BookPub::ServiceCredentialList;
use Support::BookPub::POSFileList;
use BookPub::Catalog::ServiceList;

use base 'Support::Command::Submit';

sub cmd  { return 'pos_feed' }
sub area { return 'bookpub'; }

use constant kTemplate => "/app/tools/support/templates/bookpub/pos_feed.xsl";

use constant kCookiePageSize    => 'bookpub_pos_feed_pageSize';
use constant kCookieSortBy      => 'bookpub_pos_feed_sortBy';
use constant kCookieReverseSort => 'bookpub_pos_feed_reverseSort';

use constant kDefaultPageSize    => 25;
use constant kDefaultSortBy      => 'date_created';
use constant kDefaultReverseSort => 0;

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

    my $response = $self->SUPER::execute();
    return $response if $response;

    my $pageSize =
      Common::Util::returnFirstDefined( $self->getParam('pageSize'), Common::Preference::GetValue(kCookiePageSize), kDefaultPageSize );

    # check the cookied sortBy(if any) against what's in the params (if any) to see
    # if we need to flip the sort direction
    my $sortByCookie = Common::Preference::GetValue(kCookieSortBy);
    my $sortBy       = $self->getParam('sortBy');

    my $reverseSortCookie = Common::Preference::GetValue(kCookieReverseSort);
    my $reverseSort;

    if ( $sortByCookie && $sortByCookie eq $sortBy ) {

        # toggle the sort direction
        $reverseSort = $reverseSortCookie ? 0 : 1;
        $sortBy = $sortByCookie;
    }
    $reverseSort = Common::Util::returnFirstDefined( $reverseSort, $reverseSortCookie, kDefaultReverseSort );
    $sortBy      = Common::Util::returnFirstDefined( $sortBy,      $sortByCookie,      kDefaultSortBy );

    my $page = $self->getParam('page');
    $page = 1 unless $page;

    # Some of the templates want to know what page we're on.
    #
    $self->{xml}{Pagination}{CurrentPage} = $page;

    $self->{xml}{ServiceCredentialCollection} = Support::BookPub::ServiceCredentialList->new();
    $self->{xml}{ServiceList}                 = BookPub::Catalog::ServiceList->new();

    $self->{xml}{PosFileList} = Support::BookPub::POSFileList->new(
        page => $page || 1,
        pageSize => $pageSize ne 'all' ? $pageSize : 999,
        sortBy => $sortBy,
        reverseSort => $reverseSort,
    );

    # Report the values to the template.
    #
    $self->{xml}{PosFileList}{SortBy}      = $sortBy;
    $self->{xml}{PosFileList}{ReverseSort} = $reverseSort;

    # Write out the sorting params as cookies.
    #
    Common::Preference::SetPersistentCookie( kCookiePageSize,    $pageSize );
    Common::Preference::SetPersistentCookie( kCookieSortBy,      $sortBy );
    Common::Preference::SetPersistentCookie( kCookieReverseSort, $reverseSort );
    Common::Preference::StoreCookies();

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

1;
