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

namespace lkfxdok.LKF
{
    public class Abteilung : AufenthaltChildData
    {

        public enum AbteilungPos : int { ABTPOS = 5, ABTFC = 6, DATUM = 7, ZEIT = 8, PHYSANW = 9, ENTDAT = 10, ENTZEIT = 11, ENTART = 12, FACHFC = 13, PFLEGFC = 14, NEONAT = 15, ALTERGRP = 16, AUFNRFUCO = 17 };

        public Abteilung(Aufenthalt aufenthalt) : base (aufenthalt, "X02")
        {
            aufenthalt._AddAbteilung(this);
        }

        internal Abteilung(Aufenthalt aufenthalt, string line, uint pos) : base (aufenthalt, line)
        {
            _lastSyncIndex = (int)pos;
        }

        public Abteilung(Aufenthalt aufenthalt, string line) : base(aufenthalt, line, "X02")
        {
            aufenthalt._AddAbteilung(this);
        }

        public Abteilung (string abtfc, string datum) : base (null, "X02")
        {
            ABTFC = abtfc;
            DATUM = datum;
        }

        public string ABTPOS
        {
            get
            {
                return _line[(int)AbteilungPos.ABTPOS];
            }
            set
            {
                _line[(int)AbteilungPos.ABTPOS] = value;
            }
        }

        public string POSNR
        {
            get
            {
                return _line[(int)AbteilungPos.ABTPOS];
            }
            set
            {
                _line[(int)AbteilungPos.ABTPOS] = value;
            }
        }

        public string ABTFC
        {
            get
            {
                return _line[(int)AbteilungPos.ABTFC];
            }
            set
            {
                _line[(int)AbteilungPos.ABTFC] = value;
            }
        }

        public string DATUM
        {
            get
            {
                return _line[(int)AbteilungPos.DATUM];
            }
            set
            {
                _line[(int)AbteilungPos.DATUM] = value;
            }
        }

        public string ZEIT
        {
            get
            {
                return _line[(int)AbteilungPos.ZEIT];
            }
            set
            {
                _line[(int)AbteilungPos.ZEIT] = value;
            }
        }

        public string PHYSANW
        {
            get
            {
                return _line[(int)AbteilungPos.PHYSANW];
            }
            set
            {
                _line[(int)AbteilungPos.PHYSANW] = value;
            }
        }

        public string ENTDAT
        {
            get
            {
                return _line[(int)AbteilungPos.ENTDAT];
            }
            set
            {
                _line[(int)AbteilungPos.ENTDAT] = value;
            }
        }

        public string ENTZEIT
        {
            get
            {
                return _line[(int)AbteilungPos.ENTZEIT];
            }
            set
            {
                _line[(int)AbteilungPos.ENTZEIT] = value;
            }
        }

        public string ENTART
        {
            get
            {
                return _line[(int)AbteilungPos.ENTART];
            }
            set
            {
                _line[(int)AbteilungPos.ENTART] = value;
            }
        }

        public string FACHFC
        {
            get
            {
                return _line[(int)AbteilungPos.FACHFC];
            }
            set
            {
                _line[(int)AbteilungPos.FACHFC] = value;
            }
        }

        public string PFLEGFC
        {
            get
            {
                return _line[(int)AbteilungPos.PFLEGFC];
            }
            set
            {
                _line[(int)AbteilungPos.PFLEGFC] = value;
            }
        }

        public string NEONAT
        {
            get
            {
                return _line[(int)AbteilungPos.NEONAT];
            }
            set
            {
                _line[(int)AbteilungPos.NEONAT] = value;
            }
        }

        public string ALTERGRP
        {
            get
            {
                return _line[(int)AbteilungPos.ALTERGRP];
            }
            set
            {
                _line[(int)AbteilungPos.ALTERGRP] = value;
            }
        }

        public string AUFNRFUCO
        {
            get
            {
                return _line[(int)AbteilungPos.AUFNRFUCO];
            }
            set
            {
                _line[(int)AbteilungPos.AUFNRFUCO] = value;
            }
        }

        public lkfxdok.c.LKFAbtScoring Scoring
        {
            get
            {
                if (Aufenthalt.Synchronized)
                {
                    return Aufenthalt.C.GetAbtScoring((uint)_lastSyncIndex);   
                }
                return null;
            }
        }

        public long ABTBD
        {
            get
            {
                if (Aufenthalt.Synchronized)
                {
                    return Aufenthalt.C.GetAbtBD((uint)_lastSyncIndex);
                }
                return -1;
            }
        }
    }

    public class AbteilungScoring
    {
        public readonly double LP;
        public readonly double KP;
        
        internal AbteilungScoring (double _LP, double _KP)
        {
            LP = _LP;
            KP = _KP;
        }
    } 
}
