/* Copyright 2025 FSFLA
   Alexandre Oliva <lxoliva@fsfla.org>

   Este arquivo é parte do IRPF-Livre.

   IRPF-Livre é Software Livre; você pode redistribuir e/ou modificar
   a maior parte dele, inclusive este arquivo, de acordo com os termos
   da GNU Lesser General Public License publicada pela Free Software
   Foundation; tanto a versão 2.1 dessa licença, quanto (à sua
   escolha) qualquer versão posterior.

   Alguns componentes podem ser distribuídos e/ou modificados de
   acordo com outras licenças, incluídas no executável e consolidadas
   no arquivo list/licenses nos fontes.

   IRPF-Livre é distribuído na esperança de que ele seja útil, mas SEM
   QUALQUER GARANTIA; até mesmo sem qualquer garantia implícita de
   COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte
   a GNU Lesser General Public License para mais detalhes.

   Você deve ter recebido uma cópia da GNU Lesser General Public
   License junto com IRPF-Livre; se não, escreva para a Free Software
   Foundation, Inc., no endereço 59 Temple Street, Suite 330, Boston,
   MA 02111-1307 USA.

   Veja uma tradução não oficial da licença em
   http://creativecommons.org/licenses/LGPL/2.1/legalcode.pt


   This file is part of IRPF-Livre.

   IRPF-Livre is free software; you can redistribute and/or modify
   most of it, this file included, under the terms of the GNU Lesser
   General Public License as published by the Free Software
   Foundation; either version 2.1 of the License, or (at your option)
   any later version.

   Some components can be distributed and/or modified under different
   licenses, included in the executable and consolidated in the file
   list/licenses in the source tree.

   IRPF-Livre is distributed in the hope that it will be useful, but
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with IRPF-Livre; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   USA.
*/


package serpro.ppgd.irpf.gcap;

import serpro.ppgd.negocio.Alfa;
import serpro.ppgd.negocio.Codigo;
import serpro.ppgd.negocio.ConstantesGlobais;
import serpro.ppgd.negocio.CPF;
import serpro.ppgd.negocio.Data;
import serpro.ppgd.negocio.Logico;
import serpro.ppgd.negocio.ObjetoNegocio;
import serpro.ppgd.negocio.RetornoValidacao;
import serpro.ppgd.negocio.ValidadorDefault;
import serpro.ppgd.negocio.validadoresBasicos.ValidadorCPF;
import serpro.ppgd.negocio.validadoresBasicos.ValidadorData;
import serpro.ppgd.negocio.validadoresBasicos.ValidadorNaoNulo;
import serpro.ppgd.negocio.validadoresBasicos.ValidadorNome;
import serpro.ppgd.irpf.tabelas.CadastroTabelasIRPF;

public class IdDemonstrativoGCAP extends ObjetoNegocio {
  private CPF cpf = new CPF (this, "CPF");
  private Data dataFimPermanencia = new Data (this, "Data de fim da permanencia");
  private Data dataInicioPermanencia = new Data (this, "Data de inicio da permanencia");
  private Alfa dataUltimoAcesso = new Alfa (this, "DD/MM/AAAA HH:MM:SS", 19);
  private Alfa dddDeclarante = new Alfa (this, "DDD", 2);
  private Alfa exercicio = new Alfa (this, "Exercicio", 4);
  private Alfa nome = new Alfa (this, "Nome", 60);
  private Codigo paisDeclarante = new Codigo (this, "Localização (País)", CadastroTabelasIRPF.recuperarPaises ());
  private Alfa telefoneDeclarante = new Alfa (this, "Telefone", 11);
  private Logico territorioParaisoFiscal = new Logico (this, "");

  public IdDemonstrativoGCAP ()
  {
    getDataUltimoAcesso ().setConteudo ("  /  /     :  :  ");
    getPaisDeclarante ().setConteudo("105");
    getExercicio ().setConteudo (ConstantesGlobais.EXERCICIO);
    cpf.addValidador (new ValidadorCPF ((byte) 3));
    getDataFimPermanencia ().addValidador (new ValidadorNaoNulo ((byte) 3));
    getDataFimPermanencia ().addValidador (new ValidadorData ((byte) 3));
    getDataInicioPermanencia ().addValidador (new ValidadorNaoNulo ((byte) 3));
    getDataInicioPermanencia ().addValidador (new ValidadorData ((byte) 3));
    nome.addValidador (new ValidadorNaoNulo ((byte) 3));
    nome.addValidador (new ValidadorNome ((byte) 3));
    getPaisDeclarante ().setColunaFiltro (1);
    getPaisDeclarante ().addValidador (new ValidadorNaoNulo ((byte) 3, tab.msg ("bem_pais_branco")));
    getDddDeclarante ().addValidador (new ValidadorDefault ((byte) 3)
    {
      public RetornoValidacao validarImplementado ()
      {
	if (getDddDeclarante ().getConteudoFormatado ().trim ().length () == 1)
	  return new RetornoValidacao (tab.msg ("ddd_um_digito"), getSeveridade ());
	return null;
      }
    });
    setFicha ("Identificação do Declarante de Ganhos de Capital");
  }

  public CPF getCpf ()
  {
    return cpf;
  }

  public Data getDataFimPermanencia ()
  {
    return dataFimPermanencia;
  }

  public Data getDataInicioPermanencia ()
  {
    return dataInicioPermanencia;
  }

  public Alfa getDataUltimoAcesso ()
  {
    return dataUltimoAcesso;
  }

  public Alfa getDddDeclarante ()
  {
    return dddDeclarante;
  }

  public Alfa getExercicio ()
  {
    return exercicio;
  }

  public Alfa getNome ()
  {
    return nome;
  }

  public Codigo getPaisDeclarante ()
  {
    return paisDeclarante;
  }

  public Alfa getTelefone ()
  {
    return telefoneDeclarante;
  }

  public Logico getTerritorioParaisoFiscal ()
  {
    return territorioParaisoFiscal;
  }

  public String Identificacao () {
    return (getDataInicioPermanencia ().asString ().substring (0, 4)
	    + getDataFimPermanencia ().asString ().substring (0, 4));
  }
}
