#pragma once
#include "ScreenManager.h"
#include "Text.h"
#include "SpriteStamp.h"
#include "SpriteRenderer.h"
#include "TextManager.h"
#include "malloc.h"
#include <vector>
#include <fstream>

using namespace std;

#define DIALOGUE_BACKGROUND_IMAGE_WIDTH    64
#define DIALOGUE_BACKGROUND_IMAGE_HEIGHT   256
#define DIALOGUE_BACKGROUND_IMAGE_HEIGHT_V 192

class DialogueManager{
public:
    DialogueManager(void);
    DialogueManager(SpriteRenderer* spriteRenderer, TextManager* textManager, ScreenManager*  screenManager);

    ~DialogueManager(void);

    // getter setter for SpriteRenderer
    SpriteRenderer* getSpriteRenderer();
    void setSpriteRenderer(SpriteRenderer* spriteRenderer);
    // getter setter for TextManager
    TextManager* getTextManager();
    void setTextManager(TextManager* textManager);
    // getter setter for ScreenManager
    void setScreenManager(ScreenManager* newScreenManager);
    ScreenManager* getScreenManager();
    // getter setter for background images
    SpriteStamp* getBackgroundLeft();
    SpriteStamp* getBackgroundMiddle();
    SpriteStamp* getBackgroundRight();
    void setBackground(int backgroundLeftTextureId, 
                       int backgroundMiddleTextureId, 
                       int backgroundRightTextureId);

    // add remove current dialogue
    void addDialogue(char* dialogue, SpriteStamp* talker);
    void addDialogue(int dialogueId, SpriteStamp* talker);
    void addDialogue(char* newDialogue, SpriteStamp* newTalker, int width);
    void removeDialogue();

    void render();
    // read in dialogue from file
    void  initFileDialogue(char* fileName);
    char* getFileDialogue(int index);
private:
    void init(SpriteRenderer* spriteRenderer, TextManager* textManager, ScreenManager*  screenManager);

    SpriteRenderer* spriteRenderer;
    TextManager*    textManager;
    ScreenManager*  screenManager;

    // current dialogue
    Text*        dialogue;
    // current talker
    SpriteStamp* talker;
    // background images
    SpriteStamp* leftBackground;
    SpriteStamp* middleBackground;
    SpriteStamp* rightBackground;
    // dialogue from file
    vector<char*> fileDialogue;
    // variables
    int width;
    int textTop;
    int textLeft;
    int backgroundTop;
    int backgroundLeft;
    int imageTop;
    int imageLeft;
};

