module;
#include <print>
#include <string>
#include <string_view>

export module Win;

// Klassendefinition
export class Window
{
   // enum mit Fensterstilen
   // enums sind hier Bitwerte da Fensterstile verodert werden können!
 public:
   enum eWINSTYLE {SYSMENU=0x01, MINBOX=0x02, MAXBOX=0x04, CLOSEBOX=0x08};
   // Eigenschaften
 private:
   int width, height;
   int xPos, yPos;
   std::string title;
   enum eWINSTYLE style;
   // Memberfunktionen
 public:
   Window (const int x, const int y, const int w, const int h,
           std::string_view t, const eWINSTYLE s);
   ~Window();
   void Draw() const;
   void MoveWin(const int x, const int y);
   void ResizeWin(const int, const int);
};
// Konstruktor
// Das string Objekt für den Fenstertitel sollte
// ueber die Initialisiererliste initialisiert werden damit
// es bei seiner Definition auch gleich initialisert wird!
Window::Window(const int x, const int y, const int w, const int h,
               std::string_view t, const eWINSTYLE s):
    title(t)
{
   xPos = x; yPos = y;    // Fensterposition
   width = w; height = h; // Fenstergroesse
   style = s;             // Fensterstil
   std::println("{} erstellt", title);

}
// Destruktor
Window::~Window()
{
    // Nur Meldung ausgeben
    std::println("{} geloescht", title);
}
// Fenster 'darstellen'
void Window::Draw() const
{
    std::println(
        "{}\n\tPosition:{},{}\tGroesse:{},{}\n\tStil:{}\n",
        title,xPos, yPos, width, height,static_cast<int>(style));
}
// Fenster verschieben
void Window::MoveWin(const int x, const int y)
{
   xPos = x; yPos = y;
}
// Fenstergroesse aendern
void Window::ResizeWin(const int w, const int h)
{
   width = w; height = h;
}
