<?php

class Clinica extends TRecord
{
    const TABLENAME  = 'clinica';
    const PRIMARYKEY = 'id';
    const IDPOLICY   =  'serial'; // {max, serial}

    private $system_unit;
    private $cidade;

    /**
     * Constructor method
     */
    public function __construct($id = NULL, $callObjectLoad = TRUE)
    {
        parent::__construct($id, $callObjectLoad);
        parent::addAttribute('system_unit_id');
        parent::addAttribute('cidade_id');
        parent::addAttribute('nome');
        parent::addAttribute('cnpj');
        parent::addAttribute('telefone');
        parent::addAttribute('email');
        parent::addAttribute('endereco');
        parent::addAttribute('bairro');
        parent::addAttribute('cep');
        parent::addAttribute('numero');
        parent::addAttribute('complemento');
        parent::addAttribute('logo_documento');
        parent::addAttribute('url_sistema');
    
    }

    /**
     * Method set_system_unit
     * Sample of usage: $var->system_unit = $object;
     * @param $object Instance of SystemUnit
     */
    public function set_system_unit(SystemUnit $object)
    {
        $this->system_unit = $object;
        $this->system_unit_id = $object->id;
    }

    /**
     * Method get_system_unit
     * Sample of usage: $var->system_unit->attribute;
     * @returns SystemUnit instance
     */
    public function get_system_unit()
    {
    
        // loads the associated object
        if (empty($this->system_unit))
            $this->system_unit = new SystemUnit($this->system_unit_id);
    
        // returns the associated object
        return $this->system_unit;
    }
    /**
     * Method set_cidade
     * Sample of usage: $var->cidade = $object;
     * @param $object Instance of Cidade
     */
    public function set_cidade(Cidade $object)
    {
        $this->cidade = $object;
        $this->cidade_id = $object->id;
    }

    /**
     * Method get_cidade
     * Sample of usage: $var->cidade->attribute;
     * @returns Cidade instance
     */
    public function get_cidade()
    {
    
        // loads the associated object
        if (empty($this->cidade))
            $this->cidade = new Cidade($this->cidade_id);
    
        // returns the associated object
        return $this->cidade;
    }

    /**
     * Method getAgendas
     */
    public function getAgendas()
    {
        $criteria = new TCriteria;
        $criteria->add(new TFilter('clinica_id', '=', $this->id));
        return Agenda::getObjects( $criteria );
    }
    /**
     * Method getClinicaConvenios
     */
    public function getClinicaConvenios()
    {
        $criteria = new TCriteria;
        $criteria->add(new TFilter('clinica_id', '=', $this->id));
        return ClinicaConvenio::getObjects( $criteria );
    }
    /**
     * Method getContas
     */
    public function getContas()
    {
        $criteria = new TCriteria;
        $criteria->add(new TFilter('clinica_id', '=', $this->id));
        return Conta::getObjects( $criteria );
    }
    /**
     * Method getEmailConfigs
     */
    public function getEmailConfigs()
    {
        $criteria = new TCriteria;
        $criteria->add(new TFilter('clinica_id', '=', $this->id));
        return EmailConfig::getObjects( $criteria );
    }
    /**
     * Method getTemplateClinicas
     */
    public function getTemplateClinicas()
    {
        $criteria = new TCriteria;
        $criteria->add(new TFilter('clinica_id', '=', $this->id));
        return TemplateClinica::getObjects( $criteria );
    }
    /**
     * Method getWhatsappConfigs
     */
    public function getWhatsappConfigs()
    {
        $criteria = new TCriteria;
        $criteria->add(new TFilter('clinica_id', '=', $this->id));
        return WhatsappConfig::getObjects( $criteria );
    }

    public function set_agenda_clinica_to_string($agenda_clinica_to_string)
    {
        if(is_array($agenda_clinica_to_string))
        {
            $values = Clinica::where('id', 'in', $agenda_clinica_to_string)->getIndexedArray('nome', 'nome');
            $this->agenda_clinica_to_string = implode(', ', $values);
        }
        else
        {
            $this->agenda_clinica_to_string = $agenda_clinica_to_string;
        }

        $this->vdata['agenda_clinica_to_string'] = $this->agenda_clinica_to_string;
    }

    public function get_agenda_clinica_to_string()
    {
        if(!empty($this->agenda_clinica_to_string))
        {
            return $this->agenda_clinica_to_string;
        }
    
        $values = Agenda::where('clinica_id', '=', $this->id)->getIndexedArray('clinica_id','{clinica->nome}');
        return implode(', ', $values);
    }

    public function set_agenda_profissional_to_string($agenda_profissional_to_string)
    {
        if(is_array($agenda_profissional_to_string))
        {
            $values = Pessoa::where('id', 'in', $agenda_profissional_to_string)->getIndexedArray('nome', 'nome');
            $this->agenda_profissional_to_string = implode(', ', $values);
        }
        else
        {
            $this->agenda_profissional_to_string = $agenda_profissional_to_string;
        }

        $this->vdata['agenda_profissional_to_string'] = $this->agenda_profissional_to_string;
    }

    public function get_agenda_profissional_to_string()
    {
        if(!empty($this->agenda_profissional_to_string))
        {
            return $this->agenda_profissional_to_string;
        }
    
        $values = Agenda::where('clinica_id', '=', $this->id)->getIndexedArray('profissional_id','{profissional->nome}');
        return implode(', ', $values);
    }

    public function set_agenda_procedimento_to_string($agenda_procedimento_to_string)
    {
        if(is_array($agenda_procedimento_to_string))
        {
            $values = Procedimento::where('id', 'in', $agenda_procedimento_to_string)->getIndexedArray('nome', 'nome');
            $this->agenda_procedimento_to_string = implode(', ', $values);
        }
        else
        {
            $this->agenda_procedimento_to_string = $agenda_procedimento_to_string;
        }

        $this->vdata['agenda_procedimento_to_string'] = $this->agenda_procedimento_to_string;
    }

    public function get_agenda_procedimento_to_string()
    {
        if(!empty($this->agenda_procedimento_to_string))
        {
            return $this->agenda_procedimento_to_string;
        }
    
        $values = Agenda::where('clinica_id', '=', $this->id)->getIndexedArray('procedimento_id','{procedimento->nome}');
        return implode(', ', $values);
    }

    public function set_clinica_convenio_convenio_to_string($clinica_convenio_convenio_to_string)
    {
        if(is_array($clinica_convenio_convenio_to_string))
        {
            $values = Convenio::where('id', 'in', $clinica_convenio_convenio_to_string)->getIndexedArray('nome', 'nome');
            $this->clinica_convenio_convenio_to_string = implode(', ', $values);
        }
        else
        {
            $this->clinica_convenio_convenio_to_string = $clinica_convenio_convenio_to_string;
        }

        $this->vdata['clinica_convenio_convenio_to_string'] = $this->clinica_convenio_convenio_to_string;
    }

    public function get_clinica_convenio_convenio_to_string()
    {
        if(!empty($this->clinica_convenio_convenio_to_string))
        {
            return $this->clinica_convenio_convenio_to_string;
        }
    
        $values = ClinicaConvenio::where('clinica_id', '=', $this->id)->getIndexedArray('convenio_id','{convenio->nome}');
        return implode(', ', $values);
    }

    public function set_clinica_convenio_clinica_to_string($clinica_convenio_clinica_to_string)
    {
        if(is_array($clinica_convenio_clinica_to_string))
        {
            $values = Clinica::where('id', 'in', $clinica_convenio_clinica_to_string)->getIndexedArray('nome', 'nome');
            $this->clinica_convenio_clinica_to_string = implode(', ', $values);
        }
        else
        {
            $this->clinica_convenio_clinica_to_string = $clinica_convenio_clinica_to_string;
        }

        $this->vdata['clinica_convenio_clinica_to_string'] = $this->clinica_convenio_clinica_to_string;
    }

    public function get_clinica_convenio_clinica_to_string()
    {
        if(!empty($this->clinica_convenio_clinica_to_string))
        {
            return $this->clinica_convenio_clinica_to_string;
        }
    
        $values = ClinicaConvenio::where('clinica_id', '=', $this->id)->getIndexedArray('clinica_id','{clinica->nome}');
        return implode(', ', $values);
    }

    public function set_conta_pessoa_to_string($conta_pessoa_to_string)
    {
        if(is_array($conta_pessoa_to_string))
        {
            $values = Pessoa::where('id', 'in', $conta_pessoa_to_string)->getIndexedArray('nome', 'nome');
            $this->conta_pessoa_to_string = implode(', ', $values);
        }
        else
        {
            $this->conta_pessoa_to_string = $conta_pessoa_to_string;
        }

        $this->vdata['conta_pessoa_to_string'] = $this->conta_pessoa_to_string;
    }

    public function get_conta_pessoa_to_string()
    {
        if(!empty($this->conta_pessoa_to_string))
        {
            return $this->conta_pessoa_to_string;
        }
    
        $values = Conta::where('clinica_id', '=', $this->id)->getIndexedArray('pessoa_id','{pessoa->nome}');
        return implode(', ', $values);
    }

    public function set_conta_categoria_conta_to_string($conta_categoria_conta_to_string)
    {
        if(is_array($conta_categoria_conta_to_string))
        {
            $values = CategoriaConta::where('id', 'in', $conta_categoria_conta_to_string)->getIndexedArray('nome', 'nome');
            $this->conta_categoria_conta_to_string = implode(', ', $values);
        }
        else
        {
            $this->conta_categoria_conta_to_string = $conta_categoria_conta_to_string;
        }

        $this->vdata['conta_categoria_conta_to_string'] = $this->conta_categoria_conta_to_string;
    }

    public function get_conta_categoria_conta_to_string()
    {
        if(!empty($this->conta_categoria_conta_to_string))
        {
            return $this->conta_categoria_conta_to_string;
        }
    
        $values = Conta::where('clinica_id', '=', $this->id)->getIndexedArray('categoria_conta_id','{categoria_conta->nome}');
        return implode(', ', $values);
    }

    public function set_conta_tipo_conta_to_string($conta_tipo_conta_to_string)
    {
        if(is_array($conta_tipo_conta_to_string))
        {
            $values = TipoConta::where('id', 'in', $conta_tipo_conta_to_string)->getIndexedArray('nome', 'nome');
            $this->conta_tipo_conta_to_string = implode(', ', $values);
        }
        else
        {
            $this->conta_tipo_conta_to_string = $conta_tipo_conta_to_string;
        }

        $this->vdata['conta_tipo_conta_to_string'] = $this->conta_tipo_conta_to_string;
    }

    public function get_conta_tipo_conta_to_string()
    {
        if(!empty($this->conta_tipo_conta_to_string))
        {
            return $this->conta_tipo_conta_to_string;
        }
    
        $values = Conta::where('clinica_id', '=', $this->id)->getIndexedArray('tipo_conta_id','{tipo_conta->nome}');
        return implode(', ', $values);
    }

    public function set_conta_clinica_to_string($conta_clinica_to_string)
    {
        if(is_array($conta_clinica_to_string))
        {
            $values = Clinica::where('id', 'in', $conta_clinica_to_string)->getIndexedArray('nome', 'nome');
            $this->conta_clinica_to_string = implode(', ', $values);
        }
        else
        {
            $this->conta_clinica_to_string = $conta_clinica_to_string;
        }

        $this->vdata['conta_clinica_to_string'] = $this->conta_clinica_to_string;
    }

    public function get_conta_clinica_to_string()
    {
        if(!empty($this->conta_clinica_to_string))
        {
            return $this->conta_clinica_to_string;
        }
    
        $values = Conta::where('clinica_id', '=', $this->id)->getIndexedArray('clinica_id','{clinica->nome}');
        return implode(', ', $values);
    }

    public function set_conta_atendimento_to_string($conta_atendimento_to_string)
    {
        if(is_array($conta_atendimento_to_string))
        {
            $values = Atendimento::where('id', 'in', $conta_atendimento_to_string)->getIndexedArray('id', 'id');
            $this->conta_atendimento_to_string = implode(', ', $values);
        }
        else
        {
            $this->conta_atendimento_to_string = $conta_atendimento_to_string;
        }

        $this->vdata['conta_atendimento_to_string'] = $this->conta_atendimento_to_string;
    }

    public function get_conta_atendimento_to_string()
    {
        if(!empty($this->conta_atendimento_to_string))
        {
            return $this->conta_atendimento_to_string;
        }
    
        $values = Conta::where('clinica_id', '=', $this->id)->getIndexedArray('atendimento_id','{atendimento->id}');
        return implode(', ', $values);
    }

    public function set_email_config_clinica_to_string($email_config_clinica_to_string)
    {
        if(is_array($email_config_clinica_to_string))
        {
            $values = Clinica::where('id', 'in', $email_config_clinica_to_string)->getIndexedArray('nome', 'nome');
            $this->email_config_clinica_to_string = implode(', ', $values);
        }
        else
        {
            $this->email_config_clinica_to_string = $email_config_clinica_to_string;
        }

        $this->vdata['email_config_clinica_to_string'] = $this->email_config_clinica_to_string;
    }

    public function get_email_config_clinica_to_string()
    {
        if(!empty($this->email_config_clinica_to_string))
        {
            return $this->email_config_clinica_to_string;
        }
    
        $values = EmailConfig::where('clinica_id', '=', $this->id)->getIndexedArray('clinica_id','{clinica->nome}');
        return implode(', ', $values);
    }

    public function set_template_clinica_clinica_to_string($template_clinica_clinica_to_string)
    {
        if(is_array($template_clinica_clinica_to_string))
        {
            $values = Clinica::where('id', 'in', $template_clinica_clinica_to_string)->getIndexedArray('nome', 'nome');
            $this->template_clinica_clinica_to_string = implode(', ', $values);
        }
        else
        {
            $this->template_clinica_clinica_to_string = $template_clinica_clinica_to_string;
        }

        $this->vdata['template_clinica_clinica_to_string'] = $this->template_clinica_clinica_to_string;
    }

    public function get_template_clinica_clinica_to_string()
    {
        if(!empty($this->template_clinica_clinica_to_string))
        {
            return $this->template_clinica_clinica_to_string;
        }
    
        $values = TemplateClinica::where('clinica_id', '=', $this->id)->getIndexedArray('clinica_id','{clinica->nome}');
        return implode(', ', $values);
    }

    public function set_whatsapp_config_clinica_to_string($whatsapp_config_clinica_to_string)
    {
        if(is_array($whatsapp_config_clinica_to_string))
        {
            $values = Clinica::where('id', 'in', $whatsapp_config_clinica_to_string)->getIndexedArray('nome', 'nome');
            $this->whatsapp_config_clinica_to_string = implode(', ', $values);
        }
        else
        {
            $this->whatsapp_config_clinica_to_string = $whatsapp_config_clinica_to_string;
        }

        $this->vdata['whatsapp_config_clinica_to_string'] = $this->whatsapp_config_clinica_to_string;
    }

    public function get_whatsapp_config_clinica_to_string()
    {
        if(!empty($this->whatsapp_config_clinica_to_string))
        {
            return $this->whatsapp_config_clinica_to_string;
        }
    
        $values = WhatsappConfig::where('clinica_id', '=', $this->id)->getIndexedArray('clinica_id','{clinica->nome}');
        return implode(', ', $values);
    }

    public static function findByUnitId($unitId)
    {
        return self::where('system_unit_id', '=', $unitId)->first();
    }

    public function get_endereco_formatado()
    {
        $endereco = $this->endereco;
    
        if ($this->complemento)
        {
            $endereco .= " {$this->complemento}";
        }
    
        $endereco .= ', ' . $this->numero .  ' - ' . $this->bairro . ' ' . $this->cep;
    
        $endereco .= " {$this->get_cidade()->nome} ({$this->get_cidade()->get_estado()->sigla})";
    
        return $endereco;
    }
        
}

