#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package BookPub::App;

use strict;
use warnings;

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

use RSApache::RSWebApp;
use base 'RSApache::RSWebApp';

my %gCommandMap = (

    'help' => {
        'DEFAULT'          => 'BookPub::Help::Command::Show',
        'show'             => 'BookPub::Help::Command::Show',
        'sales_file_guide' => 'BookPub::Help::Command::DownloadSalesFileGuide',
    },

    'forgotpw' => {
        'DEFAULT'  => 'AppUser::ForgotPW::Command::ForgotPW',
        'forgotpw' => 'AppUser::ForgotPW::Command::ForgotPW',
    },

    'login' => {
        'DEFAULT' => 'AppUser::Login::Command::Login',
        'login'   => 'AppUser::Login::Command::Login',
        'select'  => 'AppUser::Login::Command::Select',
        'config' => 'AppUser::Login::Command::MFAConfig',
        'qrcode' => 'AppUser::Login::Command::MFAConfig',
        'scode'  => 'AppUser::Login::Command::MFASendEmailCode',
        'auth'   => 'AppUser::Login::Command::MFAAuth',
    },

    'logout' => {
        'DEFAULT' => 'AppUser::Logout::Command::Logout',
        'logout'  => 'AppUser::Logout::Command::Logout',
    },

    'main' => {
        'DEFAULT'  => 'BookPub::Main::Command::Redirect',
        'redirect' => 'BookPub::Main::Command::Redirect',
    },

    'release' => {
        'DEFAULT' => 'BookPub::Release::Command::Show',
        'show'    => 'BookPub::Release::Command::Show',
    },

    # !!! Making space for this now.
    # !!! But I am not sure what exactly would go here...
    #
    'dashboard' => {
        'DEFAULT'      => 'BookPub::Dashboard::Command::Show',
        'show'         => 'BookPub::Dashboard::Command::Show',
        'sales_trends' => 'BookPub::Dashboard::Command::AjaxSalesTrends',
        'booksummary'  => 'BookPub::Dashboard::Command::AjaxBookSummary',
        'helloajax'    => 'BookPub::Dashboard::Command::AjaxHelloReport',
    },

    'admin' => {
        'DEFAULT'                  => 'BookPub::Admin::Command::Main',
        'main'                     => 'BookPub::Admin::Command::Main',
        'list_report_config'       => 'BookPub::Admin::Command::ListReportConfig',
        'edit_report_config'       => 'BookPub::Admin::Command::EditReportConfig',
        'update_report_config'     => 'BookPub::Admin::Command::UpdateReportConfig',
        'report_sample'            => 'BookPub::Admin::Command::ReportSample',
        'list_imprints'            => 'BookPub::Admin::Command::ListImprints',
        'edit_imprint'             => 'BookPub::Admin::Command::EditImprint',
        'delete_imprint'           => 'BookPub::Admin::Command::DeleteImprint',
        'list_contributors'        => 'BookPub::Admin::Command::ListContributors',
        'edit_contributor'         => 'BookPub::Admin::Command::EditContributor',
        'delete_contributor'       => 'BookPub::Admin::Command::DeleteContributor',
        'locale'                   => 'BookPub::Admin::Command::Locale',
        'price_variance'           => 'BookPub::Admin::Command::PriceVariance',
        'sale_feed'                => 'BookPub::Admin::Command::SaleFeed',
        'delete_sale_feed_service' => 'BookPub::Admin::Command::AjaxDeleteSaleFeedService',
        'edit_sale_feed_service'   => 'BookPub::Admin::Command::AjaxEditSaleFeedService',
        'edit_sale_feed'           => 'BookPub::Admin::Command::AjaxEditSaleFeed',
    },

    'user' => {
        'DEFAULT'    => 'BookPub::User::Command::Search',
        'search'     => 'BookPub::User::Command::Search',
        'show'       => 'BookPub::User::Command::Show',
        'edit'       => 'BookPub::User::Command::Edit',
        'profile'    => 'BookPub::User::Command::Profile',
        'import'     => 'BookPub::User::Command::Import',
        'changepw'   => 'BookPub::User::Command::ChangePW',
        'loginas'    => 'AppUser::User::Command::LoginAs',     # Let's see if we can just use the original command
        'view_terms' => 'BookPub::User::Command::ViewTerms',
        'terms'      => 'AppUser::User::Command::Terms',
        'resetmfa'   => 'BookPub::User::Command::ResetMFA',
    },

    'tracker' => {
        'DEFAULT'                  => 'BookPub::Tracker::Command::Main',
        'main'                     => 'BookPub::Tracker::Command::Main',
        'upload'                   => 'BookPub::Tracker::Command::Upload',
        'import'                   => 'BookPub::Tracker::Command::Import',
        'delete'                   => 'BookPub::Tracker::Command::DeleteFile',
        'exceptions'               => 'BookPub::Tracker::Command::Exceptions',
        'price_exceptions'         => 'BookPub::Tracker::Command::PriceExceptions',
        'service_price_exceptions' => 'BookPub::Tracker::Command::ServicePriceExceptions',
        'edit_period'              => 'BookPub::Tracker::Command::EditPeriod',
        'edit_period_notes'        => 'BookPub::Tracker::Command::EditPeriodNotes',
        'saveas'                   => 'BookPub::Tracker::Command::DownloadFile',
        'finish'                   => 'BookPub::Tracker::Command::Finish',
        'close'                    => 'BookPub::Tracker::Command::ClosePeriod',
        'reopen'                   => 'BookPub::Tracker::Command::ReopenFile',
        'qwikclose'                => 'BookPub::Tracker::Command::QwikClose',
        'download_royalty_report'  => 'BookPub::Tracker::Command::DownloadRoyaltyReport',
        'download_recon_report'    => 'BookPub::Tracker::Command::DownloadReconciliationReport',
        'currentrecon'             => 'BookPub::Tracker::Command::DownloadCurrentReconciliationReport',
        'trackerdl'                => 'BookPub::Tracker::Command::DownloadFileSummary',
        'notes'                    => 'BookPub::Tracker::Command::Notes',
        'allexceptions'            => 'BookPub::Tracker::Command::CreateExceptionsReport',
        'exceptionsdl'             => 'BookPub::Tracker::Command::DownloadExceptionsReport',
        'all_price_exceptions'     => 'BookPub::Tracker::Command::CreatePriceExceptionsReport',
        'price_exceptionsdl'       => 'BookPub::Tracker::Command::DownloadPriceExceptionsReport',
        'currency'                 => 'BookPub::Tracker::Command::ConversionRate',
        'ajax_currency'            => 'BookPub::Tracker::Command::AjaxConversionRate',
        'redeliver_royalty_report' => 'BookPub::Tracker::Command::RedeliverRoyaltyReport',
        'revenue_file_library'     => 'BookPub::Tracker::Command::RevenueFileLibrary',

    },

    'matcher' => {
        'sale'        => 'BookPub::Matcher::Command::Sale::Revenue',
        'match'       => 'BookPub::Matcher::Command::Match::Revenue',
        'unmatch'     => 'BookPub::Matcher::Command::Unmatch::Revenue',
        'sale_pos'    => 'BookPub::Matcher::Command::Sale::POS',
        'match_pos'   => 'BookPub::Matcher::Command::Match::POS',
        'unmatch_pos' => 'BookPub::Matcher::Command::Unmatch::POS',
    },

    'catalog' => {
        'DEFAULT'              => 'BookPub::Catalog::Command::Main',
        'main'                 => 'BookPub::Catalog::Command::Main',
        'edit_book'            => 'BookPub::Catalog::Command::EditBook',
        'search'               => 'BookPub::Catalog::Command::Search',
        'search_contributor'   => 'BookPub::Catalog::Command::SearchContributor',
        'search_book_subject'  => 'BookPub::Catalog::Command::SearchBookSubject',
        'search_language'      => 'BookPub::Catalog::Command::SearchLanguage',
        'list_books'           => 'BookPub::Catalog::Command::ListBooks',
        'show_book'            => 'BookPub::Catalog::Command::ShowBook',
        'show_book_product'    => 'BookPub::Catalog::Command::ShowBookProduct',
        'edit_chapter'         => 'BookPub::Catalog::Command::EditChapter',
        'show_chapter'         => 'BookPub::Catalog::Command::ShowChapter',
        'edit_book_product'    => 'BookPub::Catalog::Command::EditBookProduct',
        'edit_chapter_product' => 'BookPub::Catalog::Command::EditChapterProduct',
        'show_chart'           => 'BookPub::Catalog::Command::ShowChart',
    },
    'analytics' => {
        'DEFAULT'       => 'BookPub::Analytics::Command::Main',
        'm'             => 'BookPub::Analytics::Command::Main',
        'ss'            => 'BookPub::Analytics::Command::ServicesSummary',
        'fs'            => 'BookPub::Analytics::Command::FormatsSummary',
        'f'             => 'BookPub::Analytics::Command::FormatDetail',
        'bs'            => 'BookPub::Analytics::Command::BooksSummary',
        'b'             => 'BookPub::Analytics::Command::BookDetail',
        'cs'            => 'BookPub::Analytics::Command::ChaptersSummary',
        'c'             => 'BookPub::Analytics::Command::ChapterDetail',
        's'             => 'BookPub::Analytics::Command::ServiceDetail',
        'sf'            => 'BookPub::Analytics::Command::ServiceFormatDetail',
        'is'            => 'BookPub::Analytics::Command::ImprintsSummary',
        'as'            => 'BookPub::Analytics::Command::AuthorsSummary',
        'a'             => 'BookPub::Analytics::Command::AuthorDetail',
        'gs'            => 'BookPub::Analytics::Command::GeoSummary',
        'snapshot_main' => 'BookPub::Analytics::Command::SnapshotMain',
        'snapshot_a'    => 'BookPub::Analytics::Command::SnapshotAuthorDetail',
        'snapshot_b'    => 'BookPub::Analytics::Command::SnapshotBookDetail',
        'snapshot_s'    => 'BookPub::Analytics::Command::SnapshotServiceDetail',
        'snapshot_as'   => 'BookPub::Analytics::Command::SnapshotAuthorsSummary',
        'snapshot_bs'   => 'BookPub::Analytics::Command::SnapshotBooksSummary',
        'snapshot_ss'   => 'BookPub::Analytics::Command::SnapshotServicesSummary',
        'snapshot_fs'   => 'BookPub::Analytics::Command::SnapshotFormatsSummary',
        'snapshot_gs'   => 'BookPub::Analytics::Command::SnapshotGeoSummary',
        'snapshot_is'   => 'BookPub::Analytics::Command::SnapshotImprintsSummary',
        'snapshot_f'    => 'BookPub::Analytics::Command::SnapshotFormatDetail',
        'snapshot_sf'   => 'BookPub::Analytics::Command::SnapshotServiceFormatDetail',
    },
    'price' => {
        'DEFAULT'       => 'BookPub::Price::Command::SearchExceptions',
        'exceptions'    => 'BookPub::Price::Command::SearchExceptions',
        'price_history' => 'BookPub::Price::Command::AjaxPriceHistory',
        'approve_all'   => 'BookPub::Price::Command::ApproveAll',
    },
    'market' => {
        'DEFAULT'     => 'BookPub::Market::Command::Main',
        'main'        => 'BookPub::Market::Command::Main',
        'report'      => 'BookPub::Market::Command::Report::Product',
        'report_full' => 'BookPub::Market::Command::Report::Full',
        'download'    => 'BookPub::Market::Command::DownloadReport',
        'edit'        => 'BookPub::Market::Command::Edit',
        'delete'      => 'BookPub::Market::Command::Delete',
        'add_item'    => 'BookPub::Market::Command::AjaxAddItem',
        'delete_item' => 'BookPub::Market::Command::AjaxDeleteItem',
        'create_list' => 'BookPub::Market::Command::AjaxCreateList',
    }
);

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

    return \%gCommandMap;
}

1;
