import datetime from './datetime.js';

const allAnalysisTypes = {
    CategoricalAnalysis: 0,
    TrendAnalysis: 1
};

const allCategoricalChartTypes = {
    Pie: 0,
    Bar: 1
};

const allCategoricalChartTypesArray = [
    {
        name: 'Pie Chart',
        type: allCategoricalChartTypes.Pie
    },
    {
        name: 'Bar Chart',
        type: allCategoricalChartTypes.Bar
    }
];

const defaultCategoricalChartType = allCategoricalChartTypes.Pie;

const allTrendChartTypes = {
    Area: 0,
    Column: 1
};

const allTrendChartTypesArray = [
    {
        name: 'Area Chart',
        type: allTrendChartTypes.Area
    },
    {
        name: 'Column Chart',
        type: allTrendChartTypes.Column
    }
];

const defaultTrendChartType = allTrendChartTypes.Column;

const allChartDataTypes = {
    ExpenseByAccount: {
        type: 0,
        name: 'Expense By Account',
        availableAnalysisTypes: {
            [allAnalysisTypes.CategoricalAnalysis]: true,
            [allAnalysisTypes.TrendAnalysis]: true,
        }
    },
    ExpenseByPrimaryCategory: {
        type: 1,
        name: 'Expense By Primary Category',
        availableAnalysisTypes: {
            [allAnalysisTypes.CategoricalAnalysis]: true,
            [allAnalysisTypes.TrendAnalysis]: true,
        }
    },
    ExpenseBySecondaryCategory: {
        type: 2,
        name: 'Expense By Secondary Category',
        availableAnalysisTypes: {
            [allAnalysisTypes.CategoricalAnalysis]: true,
            [allAnalysisTypes.TrendAnalysis]: true,
        }
    },
    IncomeByAccount: {
        type: 3,
        name: 'Income By Account',
        availableAnalysisTypes: {
            [allAnalysisTypes.CategoricalAnalysis]: true,
            [allAnalysisTypes.TrendAnalysis]: true,
        }
    },
    IncomeByPrimaryCategory: {
        type: 4,
        name: 'Income By Primary Category',
        availableAnalysisTypes: {
            [allAnalysisTypes.CategoricalAnalysis]: true,
            [allAnalysisTypes.TrendAnalysis]: true,
        }
    },
    IncomeBySecondaryCategory: {
        type: 5,
        name: 'Income By Secondary Category',
        availableAnalysisTypes: {
            [allAnalysisTypes.CategoricalAnalysis]: true,
            [allAnalysisTypes.TrendAnalysis]: true,
        }
    },
    AccountTotalAssets: {
        type: 6,
        name: 'Account Total Assets',
        availableAnalysisTypes: {
            [allAnalysisTypes.CategoricalAnalysis]: true
        }
    },
    AccountTotalLiabilities: {
        type: 7,
        name: 'Account Total Liabilities',
        availableAnalysisTypes: {
            [allAnalysisTypes.CategoricalAnalysis]: true
        }
    },
    TotalExpense: {
        type: 8,
        name: 'Total Expense',
        availableAnalysisTypes: {
            [allAnalysisTypes.TrendAnalysis]: true
        }
    },
    TotalIncome: {
        type: 9,
        name: 'Total Income',
        availableAnalysisTypes: {
            [allAnalysisTypes.TrendAnalysis]: true
        }
    },
    TotalBalance: {
        type: 10,
        name: 'Total Balance',
        availableAnalysisTypes: {
            [allAnalysisTypes.TrendAnalysis]: true
        }
    }
};

const allChartDataTypesMap = {
    [allChartDataTypes.ExpenseByAccount.type]: allChartDataTypes.ExpenseByAccount,
    [allChartDataTypes.ExpenseByPrimaryCategory.type]: allChartDataTypes.ExpenseByPrimaryCategory,
    [allChartDataTypes.ExpenseBySecondaryCategory.type]: allChartDataTypes.ExpenseBySecondaryCategory,
    [allChartDataTypes.IncomeByAccount.type]: allChartDataTypes.IncomeByAccount,
    [allChartDataTypes.IncomeByPrimaryCategory.type]: allChartDataTypes.IncomeByPrimaryCategory,
    [allChartDataTypes.IncomeBySecondaryCategory.type]: allChartDataTypes.IncomeBySecondaryCategory,
    [allChartDataTypes.AccountTotalAssets.type]: allChartDataTypes.AccountTotalAssets,
    [allChartDataTypes.AccountTotalLiabilities.type]: allChartDataTypes.AccountTotalLiabilities,
    [allChartDataTypes.TotalExpense.type]: allChartDataTypes.TotalExpense,
    [allChartDataTypes.TotalIncome.type]: allChartDataTypes.TotalIncome,
    [allChartDataTypes.TotalBalance.type]: allChartDataTypes.TotalBalance
};

const defaultChartDataType = allChartDataTypes.ExpenseByPrimaryCategory.type;

const allSortingTypes = {
    Amount: {
        type: 0,
        name: 'Amount',
        fullName: 'Sort by Amount'
    },
    DisplayOrder: {
        type: 1,
        name: 'Display Order',
        fullName: 'Sort by Display Order'
    },
    Name: {
        type: 2,
        name: 'Name',
        fullName: 'Sort by Name'
    }
};

const allSortingTypesArray = [
    allSortingTypes.Amount,
    allSortingTypes.DisplayOrder,
    allSortingTypes.Name
]

const defaultSortingType = allSortingTypes.Amount.type;

export default {
    allAnalysisTypes: allAnalysisTypes,
    allCategoricalChartTypes: allCategoricalChartTypes,
    allCategoricalChartTypesArray: allCategoricalChartTypesArray,
    defaultCategoricalChartType: defaultCategoricalChartType,
    allTrendChartTypes: allTrendChartTypes,
    allTrendChartTypesArray: allTrendChartTypesArray,
    defaultTrendChartType: defaultTrendChartType,
    allChartDataTypes: allChartDataTypes,
    allChartDataTypesMap: allChartDataTypesMap,
    defaultChartDataType: defaultChartDataType,
    defaultCategoricalChartDataRangeType: datetime.allDateRanges.ThisMonth.type,
    defaultTrendChartDataRangeType: datetime.allDateRanges.ThisYear.type,
    allSortingTypes: allSortingTypes,
    allSortingTypesArray: allSortingTypesArray,
    defaultSortingType: defaultSortingType,
};
