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

namespace lkfxdok.LKF.KA
{
    public class LineTypeKasKore : LineType
    {
        internal LineTypeKasKore() : base('K')
        {

        }

        protected override LineSatzart CreateSatzart(int typeNumber)
        {
            switch (typeNumber)
            {
                case 3:
                    return new LineSatzartK03(this);
                case 8:
                    return new LineSatzartK08(this);
                default:
                    return new LineSatzart(this, typeNumber);
            }
        }

        public IEnumerable<LKFLine> LinesFor (IEnumerable<LineSatzart> satzarten)
        {
            foreach (var s in satzarten)
            {
                foreach (var l in s.Lines) yield return l;
            }
        }

        public IEnumerable<LKFLine> SuffixLines
        {
            get
            {
                return LinesFor (new List<LineSatzart>() { K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, K14, K15, K16}); 
            }
        }

        public LineSatzart K01
        {
            get
            {
                return GetSatzartInternal(1);
            }
        }

        public LineSatzart K02
        {
            get
            {
                return GetSatzartInternal(2);
            }
        }

        public LineSatzartK03 K03
        {
            get
            {
                return GetSatzartInternal(3) as LineSatzartK03;
            }
        }

        public LineSatzart K04
        {
            get
            {
                return GetSatzartInternal(4);
            }
        }

        public LineSatzart K05
        {
            get
            {
                return GetSatzartInternal(5);
            }
        }

        public LineSatzart K06
        {
            get
            {
                return GetSatzartInternal(6);
            }
        }

        public LineSatzart K07
        {
            get
            {
                return GetSatzartInternal(7);
            }
        }

        public LineSatzartK08 K08
        {
            get
            {
                return GetSatzartInternal(8) as LineSatzartK08;
            }
        }

        public LineSatzart K09
        {
            get
            {
                return GetSatzartInternal(9);
            }
        }

        public LineSatzart K10
        {
            get
            {
                return GetSatzartInternal(10);
            }
        }

        public LineSatzart K11
        {
            get
            {
                return GetSatzartInternal(11);
            }
        }

        public LineSatzart K12
        {
            get
            {
                return GetSatzartInternal(12);
            }
        }

        public LineSatzart K13
        {
            get
            {
                return GetSatzartInternal(13);
            }
        }

        public LineSatzart K14
        {
            get
            {
                return GetSatzartInternal(14);
            }
        }

        public LineSatzart K15
        {
            get
            {
                return GetSatzartInternal(15);
            }
        }

        public LineSatzart K16
        {
            get
            {
                return GetSatzartInternal(16);
            }
        }
    }
}
