<?php

class Produto_Form_ContratosResseguro extends Agro_Form
{
    public function init()
    {
        $this->addElement('hidden', 'id', array(
            'decorators' => $this->elementDecorator
        ));

        $this->addElement('text', 'ds_nome', array(
            'decorators' => $this->elementDecorator,
            'label' => 'Nome',
            'required' => true,
            'maxlength' => 100,
            'size' => 50,
        ));

		$this->addElement('text', 'dt_inicio_vigencia', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Data Início Vigência',
			'required' => true,
			'class' => 'data'
		));
		
		$this->addElement('text', 'dt_termino_vigencia', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Data Término Vigência',
			'required' => true,
			'class' => 'data'
		));
    }

    public function populate(array $data) {

		if (array_key_exists("dt_inicio_vigencia", $data)) {
			$data['dt_inicio_vigencia'] = Agro_Util::formatDate($data['dt_inicio_vigencia'], Zend_Date::DATES);
		}
		
		if (array_key_exists("dt_termino_vigencia", $data)) {
			$data['dt_termino_vigencia'] = Agro_Util::formatDate($data['dt_termino_vigencia'], Zend_Date::DATES);
		}
		
		parent::populate($data);
	}

	public function isValid($params)
	{
        $isValid = parent::isValid($params);
		
		if ($isValid) {
			try {
				$dtInicioVigencia = Agro_Util::formatDate($params['dt_inicio_vigencia'], 'yyyy-MM-dd');
				$dtTerminoVigencia = Agro_Util::formatDate($params['dt_termino_vigencia'], 'yyyy-MM-dd');
				$timestampInicial = strtotime($dtInicioVigencia);
				$timestampFinal = strtotime($dtTerminoVigencia);

				if ($timestampInicial > $timestampFinal) {
					throw new Exception("Data de início de vigência não pode ser maior que a data de término de vigência.");
				}

				$modelContratosResseguro = new Produto_Model_ContratosResseguro();
				$periodoValido = $modelContratosResseguro->isPeriodoValido($dtInicioVigencia, $dtTerminoVigencia, (int)$params['id']);
				if (!$periodoValido) {
					throw new Exception('O período informado entra em conflito com um período existente.');
				}
			} catch (\Throwable $th) {
				$isValid = false;
				$this->dt_inicio_vigencia->addError($th->getMessage());
			}

		}

		return $isValid;
    }
}
