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

namespace ZionRobot.Models.AASP
{
    public class IntimacoesCollection
    {
        public List<Intimacao> Intimacoes { get; set; }

    }

    public class Intimacao
    {
        private string rodape;

        public Jornal Jornal { get; set; }
        public string Titulo { get; set; }
        public string TextoPublicacao { get; set; }
        public int NumeroPublicacao { get; set; }
        public int NumeroArquivo { get; set; }
        public string Cabecalho { get; set; }
        public Int64 CodigoRelacionamento { get; set; }
        public string NumeroUnicoProcesso { get; set; }
        public string Rodape { get => rodape;  set => rodape = value is null ? string.Empty : value; }

        public string GetParamValue(string paramName)
        {
            Object obj = this;

            string[] nameParts = paramName.Split('.');
            if (nameParts.Length == 1)
            {
                object propertyValue = obj.GetType().GetProperty(paramName).GetValue(obj);
                return propertyValue is null ? string.Empty : propertyValue.ToString();
            }

            foreach (String part in nameParts)
            {
                if (obj == null)
                    break;

                Type type = obj.GetType();
                System.Reflection.PropertyInfo info = type.GetProperty(part);

                if (info == null)
                    break;

                obj = info.GetValue(obj, null);
            }

            return obj.ToString();
        }

        public string GetAllParam()
        {
            return string.Join("\r\n",
                Jornal.GetAllParam(),
                $"{nameof(Titulo)}: {Titulo.Replace('\r', ' ').Replace('\n', ' ').Replace(@"  ", @" ")}",
                $"{nameof(TextoPublicacao)}: {TextoPublicacao.Replace('\r', ' ').Replace('\n', ' ').Replace(@"  ", @" ")}",
                $"{nameof(NumeroPublicacao)}: {NumeroPublicacao}",
                $"{nameof(NumeroArquivo)}: {NumeroArquivo}",
                $"{nameof(Cabecalho)}: {Cabecalho.Replace('\r', ' ').Replace('\n', ' ').Replace(@"  ", @" ")}",
                $"{nameof(Rodape)}: {Rodape.Replace('\r', ' ').Replace('\n', ' ').Replace(@"  ", @" ")}",
                $"{nameof(CodigoRelacionamento)}: {CodigoRelacionamento}",
                $"{nameof(NumeroUnicoProcesso)}: {NumeroUnicoProcesso}");
        }

        public string GetParamAASP()
        {
            DateTime dateTime;
            DateTime.TryParse(Jornal.DataDisponibilizacao_Publicacao, out dateTime);

            Jornal.DataDisponibilizacao_Publicacao = dateTime.ToString(@"D", new CultureInfo(@"pt-BR"));

            return string.Join(" - ",
                Jornal.NomeJornal,
                Jornal.TermoReferenciaData,
                Jornal.DataDisponibilizacao_Publicacao,
                $"{nameof(NumeroArquivo)}: {NumeroArquivo}",
                $"{nameof(NumeroPublicacao)}: {NumeroPublicacao}",
                $"{nameof(Titulo)}: {Titulo.Replace('\r', ' ').Replace('\n', ' ').Replace(@"  ", @" ")}",
                $"{nameof(Cabecalho)}: {Cabecalho.Replace('\r', ' ').Replace('\n', ' ').Replace(@"  ", @" ")}",
                $"{nameof(TextoPublicacao)}: {TextoPublicacao.Replace('\r', ' ').Replace('\n', ' ').Replace(@"  ", @" ")}",
                $"{nameof(Rodape)}: {Rodape.Replace('\r', ' ').Replace('\n', ' ').Replace(@"  ", @" ")}"
                );
        }
    }

    public class Jornal
    {
        public string NomeJornal { get; set; }
        public string DataTratamento { get; set; }
        public string DataDisponibilizacao_Publicacao { get; set; }
        public string TermoReferenciaData { get; set; }

        public string GetAllParam()
        {
            return string.Join("\r\n",
                $"{nameof(NomeJornal)}: {NomeJornal}",
                $"{nameof(DataTratamento)}: {DataTratamento}",
                $"{nameof(DataDisponibilizacao_Publicacao)}: {DataDisponibilizacao_Publicacao}",
                $"{nameof(TermoReferenciaData)}: {TermoReferenciaData}");
        }
    }
}
