using System;

namespace _01Buergeramt_Di
{
    // DoJo-Klassenaufgabe:

    #region Personalausweis
    // Programmieren Sie eine Klasse Personalausweis mit folgenden Eigenschaften
    // string name
    // int id
    // - Konstruktor: Erhält den Namen und vergibt eine neue, eindeutige Id (beginnend mit 1000)
    // - Property zum Setzen und Lesen der nächsten Id. Beim Setzen muss die Id größer sein als die bisherige Nummer!
    //      Dieses Property muss vor dem Anlegen der ersten Person aufrufbar sein!
    // - Property: Zum Lesen des Namens (kann auch als Auto-Property realisiert werden)
    // - Überladene ToString-Methode: Soll den Namen und die Id ausgeben
    #endregion
    #region Bürgeramt
    // Programmieren Sie zusätzlich eine Klasse Bürgeramt mit folgenden Eigenschaften
    // string ort
    // - Konstruktor, dem der Ortsname und die Anzahl der zu speichernden Personalausweise übergeben werden
    // - Methode NeuerAusweis: Erhält den Namen, legt einen neuen Pass an, speichert diesen im Feld an der 
    //      nächsten freien Stelle und liefert den Personalausweis zurück
    // - Optional: Methode AllePersos(string teilname): liefert ein Feld passender Größe mit allen 
    //      Personalausweisen zurück, die den "teilnamen" enthalten (Tipp: String-Methode contains)

    // Main: Legen Sie zwei Bürgerämter an (Nürnberg/Fürth) und lassen Sie für Nürnberg mehrere Pässe erzeugen
    //      Optional: Rufen Sie AllePersos mit einem passenden Teilnamen auf und geben Sie diese aus!
    #endregion
    class Personalausweis
    {
        public string name { get; private set; }
        int id;
        static int naechsteID = 1000;
        public Personalausweis(string name)
        {
            this.name = name;
            this.id = naechsteID++;
        }
        public static int NaechsteID
        {
            get => naechsteID;
            set
            {
                if (value >= naechsteID)
                    naechsteID = value;
                else
                    throw new ArgumentOutOfRangeException("Naechste ID muss größer sein!");
            }
        }
        public override string ToString() => $"Name: {name}  Id: {id}";
    }
    class Buergeramt
    {
        string ort;
        Personalausweis[] personalausweise;
        int ausweisIndex = 0;
        public Buergeramt(string ort, int anzahlAusweise)
        {
            this.ort = ort;
            personalausweise = new Personalausweis[anzahlAusweise];
        }
        public Personalausweis NeuerAusweis(string name)
        {
            if (ausweisIndex >= personalausweise.Length)
                throw new IndexOutOfRangeException("Zuviele Ausweise");
            personalausweise[ausweisIndex] = new Personalausweis(name);
            return personalausweise[ausweisIndex++];
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Personalausweis.NaechsteID = 2000;
            Console.WriteLine(Personalausweis.NaechsteID);
            Personalausweis p1 = new Personalausweis("Anton");
            Personalausweis.NaechsteID = 3000;
            Console.WriteLine(p1);
            Buergeramt BuergeramtNuernberg = new Buergeramt("Nürnberg", 600000);
            Personalausweis mueller = BuergeramtNuernberg.NeuerAusweis("Müller");
        }
    }
}