<?php

/**
 * This is the model class for table "tbl_empresas".
 *
 * The followings are the available columns in table 'tbl_empresas':
 * @property integer $id
 * @property string $cif
 * @property string $nombre
 * @property string $email
 * @property string $pagina_web
 * @property integer $empleados
 * @property string $direccion
 * @property string $descripcion
 * @property string $ficheroLogotipo
 * @property FotografiaPerfil $logotipo
 * 
 * The followings are the available model relations:
 * @property Usuario $usuarios
 */
class Empresa extends CActiveRecord {

    public $ficheroLogotipo;
    public $logotipo;
    
    /**
     * Returns the static model of the specified AR class.
     * @param string $className active record class name.
     * @return Empresa the static model class
     */
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    /**
     * @return string the associated database table name
     */
    public function tableName() {
        return 'tbl_empresas';
    }

    /**
     * @return array validation rules for model attributes.
     */
    public function rules() {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('empleados, cif, nombre, email, pagina_web, direccion', 'length', 'max' => 255),
            array('pagina_web', 'url', 'defaultScheme' => 'http'),
            array('email', 'email'),
            array('descripcion', 'safe'),
            array('ficheroLogotipo', 'file',
                'types' => 'jpg',
                'maxSize' => 1024 * 1024 * 1, // 1MB como máximo
                'tooLarge' => Yii::t('profind', 'La imagen es demasiado pesada. Elija otra más pequeña.'),
                'wrongType' => Yii::t('profind', 'Sólo se permiten imágenes en formato JPG.'),
                'allowEmpty' => 'true',
            ),
            array('id, cif, nombre, email, pagina_web, empleados, direccion, descripcion', 'safe', 'on' => 'search'),
        );
    }

    /**
     * @return array relational rules.
     */
    public function relations() {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            'usuarios' => array(self::HAS_MANY, 'Usuario', 'id_empresa'),
        );
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels() {
        return array(
            'id' => 'ID',
            'ficheroLogotipo' => 'Logotipo',            
            'cif' => 'CIF',
            'nombre' => 'Nombre',
            'email2' => 'Email',
            'pagina_web' => 'Página web',
            'empleados' => 'Nº de empleados',
            'direccion' => 'Dirección',
            'descripcion' => 'Descripción',
        );
    }

    /**
     * Retrieves a list of models based on the current search/filter conditions.
     * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
     */
    public function search() {
        // Warning: Please modify the following code to remove attributes that
        // should not be searched.

        $criteria = new CDbCriteria;

        $criteria->compare('id',$this->id);
        $criteria->compare('cif',$this->cif,true);
        $criteria->compare('nombre',$this->nombre,true);
        $criteria->compare('email',$this->email,true);
        $criteria->compare('pagina_web',$this->pagina_web,true);
        $criteria->compare('empleados',$this->empleados);
        $criteria->compare('direccion',$this->direccion,true);
        $criteria->compare('descripcion',$this->descripcion,true);
        
        return new CActiveDataProvider($this, array(
                    'criteria' => $criteria,
                ));
    }
    
    protected function afterFind() {
        parent::afterFind();
        $this->logotipo = new FotografiaPerfil();
        $this->logotipo->modelo = $this;
    }
    
    protected function afterConstruct() {
        parent::afterConstruct();
        $this->logotipo = new FotografiaPerfil();
        $this->logotipo->modelo = $this;
    }
    
    protected function afterSave() {
        parent::afterSave();
        if ($this->isNewRecord)
            $this->createUploadDir();
    }

    protected function afterDelete() {
        parent::afterDelete();
        $this->deleteUploadDir();
    }
    
    /*
     * Devuelve la ruta con los ficheros de la empresa.
     * Incluye el separador de directorios al final de la ruta.
     * @return string ruta
     */
    public function getUploadPath() {
        return Yii::getPathOfAlias('application.uploads.empresas') . DIRECTORY_SEPARATOR . $this->id . DIRECTORY_SEPARATOR;
    }
    
    /*
     * Devuelve el nombre del fichero por defecto cuando no se tiene imagen
     * @return string ruta
     */
    public function getImagenDefault() {
        return 'company_photo.jpg';
    }

    /*
     * Crea un directorio para almacenar ficheros de la empresa
     * @return boolean
     */
    private function createUploadDir() {
        $upload = $this->getUploadPath();

        if(!is_dir($upload)) {
            return mkdir($upload);
        }
        else return false;
    }

    /*
     * Elimina el directorio de la empresa y todos sus ficheros
     * @return boolean
     */
    private function deleteUploadDir() {
        $upload = $this->getUploadPath();
        
        if(is_dir($upload))
            return GHelper::recursiveRemoveDirectory($upload);
        else return false;
    }

    
}