<?php

namespace common\models;

use Yii;

/**
 * This is the model class for table "voucher".
 *
 * @property integer $id
 * @property string $utente
 * @property integer $cinema
 * @property string $nome
 * @property string $cognome
 * @property string $email
 * @property string $data_voucher
 * @property string $data_creazione
 * @property string $codice
 * @property integer $valido
 * 
 * @property Cinema $cinema0
 */
class Voucher extends \yii\db\ActiveRecord {

    /**
     * @inheritdoc
     */
    public static function tableName() {
        return 'voucher';
    }

    /**
     * @inheritdoc
     */
    public function rules() {
        return [
            [['utente', 'cinema', 'nome', 'cognome', 'data_voucher', 'data_creazione', 'valido'], 'required'],
            [['cinema', 'valido'], 'integer'],
            [['data_voucher', 'data_creazione'], 'safe'],
            [['utente'], 'string', 'max' => 16],
            [['nome', 'cognome'], 'string', 'max' => 256],
            [['email'], 'string', 'max' => 128],
            [['codice'], 'string', 'max' => 32]
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels() {
        return [
            'id' => 'ID',
            'utente' => 'Utente',
            'cinema' => 'Cinema',
            'nome' => 'Nome',
            'cognome' => 'Cognome',
            'email' => 'Email',
            'data_voucher' => 'Data Voucher',
            'data_creazione' => 'Data Creazione',
            'codice' => 'Codice',
            'valido' => 'Valido',
        ];
    }

    public function getCinema0() {
        return $this->hasOne(Cinema::className(), ['id' => 'cinema']);
    }

    public function generateCodice() {
        $md5Id = md5($this->id);
        $randomChar = self::generateRandomString(1);

        // code length = 11
        $code_length = 16;

        $code = $this->id . $randomChar;

        $len = strlen($code);
        $m = 0;
        for ($i = $len; $i < $code_length; $i++) {
            $code .= $md5Id[$m];
            $m++;
        }

        return $code;
    }

    public static function generateRandomString($length = 10) {
        $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $charactersLength = strlen($characters);
        $randomString = '';
        for ($i = 0; $i < $length; $i++) {
            $randomString .= $characters[rand(0, $charactersLength - 1)];
        }
        return $randomString;
    }

    public static function searchForUserActive($utente) {
        // create ActiveQuery
        $query = self::find();
        $query->joinWith(['cinema0']);

        $query->where(['utente' => $utente, 'valido' => 1])->andWhere(['>=', 'data_voucher', date("Y-m-d")])->orderBy('data_voucher ASC');

        $dataProvider = new \yii\data\ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                'pageSize' => 10
            ]
        ]);

        return $dataProvider;
    }

    public static function searchForUserStorico($utente) {

        // create ActiveQuery
        $query = self::find();
        $query->joinWith(['cinema0']);

        $query->where(['utente' => $utente, 'valido' => 1])->andWhere(['<', 'data_voucher', date("Y-m-d")])->orderBy('data_voucher DESC');

        $dataProvider = new \yii\data\ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                'pageSize' => 10
            ]
        ]);

        return $dataProvider;
    }

    public static function searchForUser($utente) {
        // create ActiveQuery
        $query = self::find();
        $query->joinWith(['cinema0']);

        $query->where(['utente' => $utente, 'valido' => 1])->orderBy('data_voucher ASC');

        $dataProvider = new \yii\data\ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                'pageSize' => 10
            ]
        ]);

        return $dataProvider;
    }

}
