/*
  Copyright 2010 Grégory Soutadé

  This file is part of KissCount.

  KissCount is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  KissCount is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with KissCount.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef USER_H
#define USER_H

#include <map>
#include <vector>
#include <wx/wx.h>
#include <wx/colour.h>

#include "Category.h"
#include "Account.h"
#include "Operation.h"

class User
{
public:
    ~User();

    wxString _id;
    wxString _name;
    wxString _password;
    std::vector<Account> _accounts;
    std::map<unsigned int, std::map<unsigned int, std::vector<Operation> >* > _operations;
    std::vector<Category> _categories;
    std::vector<wxFont> _categoriesFonts;
    std::map<wxString, wxString> _preferences;

    Category GetCategory(wxString& catId);
    wxString GetCategoryName(wxString& catId);
    wxString GetCategoryId(wxString& catName);
    const wxFont& GetCategoryFont(wxString& catId);
    wxString GetAccountName(const wxString& accountId);
    wxString GetAccountId(wxString& accountName);
    int GetCategoriesNumber();
    int GetAccountsNumber();
    int GetOperationsNumber(int month, int year);
    wxLanguage GetLanguage();
    void LinkOrUnlinkOperation(Operation& op);
    void Group(Operation* op);
    void UnGroup(Operation* op);
    void ResolveGroups(int year);
};

#endif