using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace SimulazioneVerificaFile
{
    class Alunno
    {
        public Alunno(string annoCorso, string sezione, string indirizzo,string matricola,string nome, string cognome,  string dataNascita, string luogoNascita)
        {
            AnnoCorso = annoCorso;
            Sezione = sezione;
            Indirizzo = indirizzo;
            Nome = nome;
            Cognome = cognome;
            Matricola = matricola;
            DataNascita = dataNascita;
            LuogoNascita = luogoNascita;
        }
        public Alunno (string riga)
        {
            string[] campi=riga.Split(';');
            if (campi.Length != 8)
                throw new Exception("Alunno: Costruttore - Numero campi errato");
            AnnoCorso = campi[0];
            Sezione = campi[1];
            Indirizzo = campi[2];
             Matricola = campi[3];
           Nome = campi[4];
            Cognome = campi[5];
            DataNascita = campi[6];
            LuogoNascita = campi[7];

        }
        //anno corso(da 1 a 5)
        private int annoCorso;
        public string AnnoCorso
        {
            get { return annoCorso.ToString(); }
            set
            {
                if (!int.TryParse(value, out annoCorso)||annoCorso<1||annoCorso>5)
                    throw new ArgumentException("Alunno: Anno corso non valido");
            }
        }

        //sezione(1 lettera maiuscola tra A e G)
        private string sezione;
        public string Sezione
        {
            get { return sezione; }
            set
            {
                if(value.Trim().Substring(0,1).ToUpper().CompareTo("A")==-1 || value.Trim().Substring(0, 1).ToUpper().CompareTo("G")==1)
                    throw new ArgumentException("Alunno: Sezione Errata");
                sezione = value;
            }
        }
        public string Classe
        {
            get { return AnnoCorso + Sezione; }
        }
        //indirizzo(stringa)  es.Informatica, Automazione, RIM …
        public string Indirizzo { get; private set; }

        //nome
        public string Nome { get;private set; }
        //cognome
        public string Cognome { get; private set; }

        public string Nominativo 
        { 
            get { return string.Format("{0} {1}", Cognome, Nome); } 
        }
        //matricola(numero univoco di 4 cifre)
        private string matricola;
        public string Matricola
        {
            get { return matricola; }
            set
            {
                int m;
                if (!int.TryParse(value, out m))
                    throw new ArgumentException("Alunno: Matricola non numerica");
                if (m < 1000 || m>9999)
                    throw new ArgumentException("Alunno: Matricola non valida");
                matricola = value;
            }
        }
        public string NominativoCompleto
        {
            get { return string.Format("{0}- {1}", Matricola, Nominativo); }
        }


        //dataNascita
        DateTime dataNascita;
        public string Numero { get; private set; }
        public string DataNascita
        {
            get { return dataNascita.ToShortDateString(); }
            private set
            {
                if (!DateTime.TryParse(value, out dataNascita))
                    throw new ArgumentException("Alunno: Data nascita non valida");
            }
        }

        //luogo nascita
        public string LuogoNascita { get; private set; }
        public override string ToString()
        {
            return string.Format("{0};{1};{2};{3};{4};{5};{6};{7}",AnnoCorso, Sezione,Indirizzo, Nome, Cognome,Matricola,DataNascita,LuogoNascita);
        }
        public string Info()
        {
            string st=string.Empty;
            st+=string.Format("Matricola: {0} Classe: {1}\n",Matricola, Classe);
            st += string.Format("Nominativo: {0}\n", Nominativo);
            st += string.Format("Nato a {0} il {1}\n", LuogoNascita, DataNascita);
            return st;
        }
    }
}
