using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace ElectronicLibrary
{
    class Program
    {
        static void Main(string[] args)
        {
            Book Buch = new Book("Dan Brown","Sakrileg","2006",BookType.Roman);
            Buch.KapitelHinzufuegen("Kapitel 1");
            Buch.KapitelHinzufuegen("Kapitel 2");
            Buch.KapitelHinzufuegen("Kapitel 3");
            Console.WriteLine(Buch.Kapitel[0]);
            Console.WriteLine(Buch.ToString());
            Console.ReadLine();
        }
    }

    class Book
    {
        #region Data Members

        private string autor;
        public string Autor
        {
            get { return autor; }
            set { autor = value; }
        }

        private string titel;
        public string Titel
        {
            get { return titel; }
            set { titel = value; }
        }

        private string erscheinungsjahr;
        public string Erscheinungsjahr
        {
            get { return erscheinungsjahr; }
            set { erscheinungsjahr = value; }
        }

        private BookType buchtyp;
        public BookType Buchtyp
        {
            get { return buchtyp; }
            set { buchtyp = value; }
        }

        private ArrayList kapitel;
        public ArrayList Kapitel
        {
            get { return kapitel; }
            set { kapitel = value; }
        }

        #endregion

        public Book(string autor, string titel, string erscheinungsjahr, BookType buchtyp)
        {
            this.autor = autor;
            this.titel = titel;
            this.erscheinungsjahr = erscheinungsjahr;
            this.buchtyp = buchtyp;
            kapitel = new ArrayList();
        }

        public Book(Book buch) : this(buch.autor,buch.titel,buch.erscheinungsjahr,buch.buchtyp) { }

        public void KapitelHinzufuegen(string kapitelname)
        {
            kapitel.Add(kapitelname);
        }

        public override string ToString()
        {
            string ausgabe = "<book> ";
            ausgabe += "<author>" + autor + "</author> ";
            ausgabe += "<title>" + titel + "</title> ";
            ausgabe += "<year>" + erscheinungsjahr + "</year>";
            ausgabe += "<type>" + buchtyp + "</type> ";
            ausgabe += "<chapters> ";
            foreach (string k in kapitel)
                ausgabe += "<chapter>" + k + "</chapter> ";
            ausgabe += "</chapters> ";
            ausgabe += "</book>";
            return ausgabe;
        }

        // wird nicht unbedingt benötigt, da ArrayList bereits einen Indexer implementiert
        /*public string this[int i]
        {
            get
            {
                return (string)kapitel[i];
            }
            set
            {
                kapitel[i] = value;
            }
        }*/
    }

    enum BookType
    {
        Roman, Gedicht, Maerchen, Sage, Sachbuch
    }
}
