// Definiert die abgeleiteten Klassen von Artikel
module;
#include <print>
#include <string_view>
#include <iostream>

export module ArtikelType;  // Artikeltypen exportieren
export import Artikel;      // Artikel importieren & exportieren

// Von Artikel abgeleitete Klasse Monitor
export class Monitor : public Artikel
{
    unsigned short diagonale;       // Diagonale
public:
    // Standard-ctor fuer Felddefinition
    Monitor() = default;
    // ctor, erhaelt Name und Diagonal und uebergibt
    // Typ und Name an Artikel
    Monitor(std::string_view name, unsigned short diag) : Artikel('M', name)
    {
        diagonale = diag;
    }
    // Ausgabe der Daten
    virtual std::ostream& Print(std::ostream& out) const
    {
        out << std::format("Art-Nr.: {}, Monitor: {}, Diagonale: {}\n", nummer, name, diagonale);
        return out;
    }
};

// Von Artikel abgeleitete Klasse Keyboard
export class Keyboard : public Artikel
{
public:
    enum LANGUAGE { DE, EN };   // Tastaturtypen
private:
    LANGUAGE typ;               // Tastaturtyp
    // enum-Wert in Text 'umwandeln'
    inline static const std::string sType[] = { "deutsch","englisch" };
public:
    // Standard-ctor fuer Felddefinition
    Keyboard() = default;
    // ctor, erhaelt Name und Sprache und uebergibt
    // Typ und Name an Artikel
    Keyboard(std::string_view name, LANGUAGE lang) :
        Artikel('K', name), typ{ lang }
    {
    }
    // Ausgabe der Daten
    virtual std::ostream& Print(std::ostream& out) const
    {
        out << std::format("Art-Nr.: {}, Tastatur: {}, Typ: {}\n", nummer, name, sType[typ]);
        return out;
    }
};
