// CStoryProfile - [2020-04-13 11:57:47]
#ifndef _CSTORYPROFILE_H_
#define _CSTORYPROFILE_H_

#include "CFTTSerialize.h"
#include "CDataBase.h"
#include "CPlayer.h"
#include "CStoryProfileStages.h"

/*
001E356A CStoryProfile::SetStageStars(int,int)
001E35BA CStoryProfile::SetStageComplete(int,int,bool)
001E75B0 CStoryProfile::Init()
001E7688 CStoryProfile::SetTrialsClub()
001E76B8 CStoryProfile::Exit()
001E76D0 CStoryProfile::Serialize(CFTTSerialize &,bool)
001E7700 CStoryProfile::GetRandomLeague(ELeague,ELeague)
001E77B0 CStoryProfile::GetStartingCountry()
001E782C CStoryProfile::GetPossibleStartingClubs(int,int *,int)
001E78F4 CStoryProfile::GetPossibleNewClubs(int,bool,int,int *,int,ELeague,bool,bool)
001E7A00 CStoryProfile::GetHaveChangedTeamOnStage(int)
001E7A2C CStoryProfile::SetStageClubTeam(int,int)
001E7A8C CStoryProfile::SetOppoClubTeams(bool)
001E7BE0 CStoryProfile::GetStageClubTeam(int)
001E7C10 CStoryProfile::GetClubTeam()
001E7C28 CStoryProfile::SetOppoNationalTeams()
001E7D04 CStoryProfile::GetNumOppoTeams(int,int)
001E7D64 CStoryProfile::SetupNextStage()
001E7E18 CStoryProfile::SetSeason(int)
001E7E28 CStoryProfile::GetOppoTeam(int,int,int,int,TTeamInfo *)
001E7F64 CStoryProfile::ApplyUserPlayer(TPlayerInfo *)
001E7F9C CStoryProfile::UseGoldenBoot()
001E7FB4 CStoryProfile::UseRewind()
001E7FD8 CStoryProfile::EnergyUse(int)
001E8090 CStoryProfile::EnergyIncrease(int,bool)
001E80C4 CStoryProfile::SetTimeSinceReboot()
001E80DC CStoryProfile::CheckEnergyFallback()
001E8114 CStoryProfile::EnergyCheckRestore()
001E82C4 CStoryProfile::EnergyGetRestoreSecs()
001E830C CStoryProfile::SecondsToFullEnergy(int,int)
001E8360 CStoryProfile::GetDescription(wchar_t *,int)
*/

enum ESyncState {
  ESyncState_0,
  ESyncState_1,
  ESyncState_2,
  ESyncState_3,
  ESyncState_4
};

class TMoveClubs {
public:
  void Serialize(CFTTSerialize &);  // 001E754C
  uint16 filed_0;
  uint16 filed_2;
};

//0x240
class TStoryProfileData {
public:
  void Serialize(CFTTSerialize &);

  bool field_0;
  bool field_1;
  TPlayerInfoLight field_2;
  bool field_14;
  bool field_15;
  TMoveClubs field_16;
  // ushort field_16;
  // ushort field_18;
  TMoveClubs field_1A[20];
  uchar field_6A;
  char field_6B;
  ushort field_6C;
  ushort field_6E[16];
  uchar field_8E;
  char field_8F;
  ushort field_90[39];
  uchar field_DE;
  char field_DF;
  ushort field_E0[75];
  uchar field_176;
  char field_177;
  ushort field_178[38];
  uchar field_1C4;
  char field_1C5;
  char field_1C6;
  char field_1C7;
  int field_1C8;
  ushort field_1CC;
  char field_1CE;
  char field_1CF;
  long field_1D0;
  long field_1D4;
  long field_1D8;
  uint field_1DC;
  uint field_1E0;
  uint field_1E4;
  wchar_t field_1E8[17];
  unsigned long long field_210[5];
  ESyncState field_238;
  long field_23C;
};

class CStoryProfile {
public:
  void SetStageStars(int, int);                                              // 001E356A
  void SetStageComplete(int, int, bool);                                     // 001E35BA
  void Init();                                                               // 001E75B0
  static void SetTrialsClub();                                               // 001E7688
  void Exit();                                                               // 001E76B8
  void Serialize(CFTTSerialize &, bool);                                     // 001E76D0
  int GetRandomLeague(ELeague, ELeague);                                     // 001E7700
  int GetStartingCountry();                                                  // 001E77B0
  int GetPossibleStartingClubs(int, int *, int);                             // 001E782C
  int GetPossibleNewClubs(int, bool, int, int *, int, ELeague, bool, bool);  // 001E78F4
  int GetHaveChangedTeamOnStage(int);                                        // 001E7A00
  void SetStageClubTeam(int, int);                                           // 001E7A2C
  void SetOppoClubTeams(bool);                                               // 001E7A8C
  ushort GetStageClubTeam(int);                                              // 001E7BE0
  static ushort GetClubTeam();                                               // 001E7C10
  void SetOppoNationalTeams();                                               // 001E7C28
  int GetNumOppoTeams(int, int);                                             // 001E7D04
  bool SetupNextStage();                                                     // 001E7D64
  void SetSeason(int);                                                       // 001E7E18
  int GetOppoTeam(int, int, int, int, TTeamInfo *);                          // 001E7E28
  void ApplyUserPlayer(TPlayerInfo *);                                       // 001E7F64
  void UseGoldenBoot();                                                      // 001E7F9C
  void UseRewind();                                                          // 001E7FB4
  void EnergyUse(int);                                                       // 001E7FD8
  void EnergyIncrease(int, bool);                                            // 001E8090
  void SetTimeSinceReboot();                                                 // 001E80C4
  void CheckEnergyFallback();                                                // 001E80DC
  void EnergyCheckRestore();                                                 // 001E8114
  int EnergyGetRestoreSecs();                                                // 001E82C4
  static int SecondsToFullEnergy(int a1, int a2);                            // 001E830C
  void GetDescription(wchar_t *, int);                                       // 001E8360

public:
  CStoryProfileStages *filed_0;
  static TStoryProfileData m_tData;
};

#endif  //_CSTORYPROFILE_H_