<?php
/**
 * Created by PhpStorm.
 * User: xiaofeng
 * Date: 2018/3/4
 * Time: 上午9:25
 * 报名
 */

namespace common\models;

class Enroll extends Common
{
    //PC端 模板来源
//    public  $sourceArr = [
//        0  => '楼盘搜索列表-降价通知',
//        1  => '楼盘搜索列表-立即咨询',
//        2  => '楼盘搜索列表-帮你找房',
//        3  => '新房-预约看房',
//        4  => '区域新房页-降价通知',
//        5  => '区域新房页-专业帮您找房',
//        6  => '资讯详情-资讯订阅',
//        7  => '楼盘首页-动态提醒',
//        8  => '楼盘首页-降价通知',
//        9  => '楼盘首页-专业帮您找房',
//        10 => '楼盘首页-公共降价通知',
//        11 => '城市团购详情-降价通知',
//        12 => '城市团购详情-我要看房',
//        13 => '团购详情页-我要参团',
//        14 => '团购详情页-我要看房',
//        15 => '楼盘首页-报名看房',
//        16 => '楼盘首页-楼盘动态',
//        17 => '楼盘首页-楼盘户型',
//        18 => '楼盘首页-楼盘信息',
//        19 => '楼盘首页-楼盘相册',
//        20 => '列表-有新房通知我',
//        21 => '新房-有新房通知我',
//        22 => '首页-查看房源',
//        23 => '首页-购房需求',
//        24 => '首页-房价动态提醒',
//        25 => '区域介绍-立即咨询',
//        26 => '区域介绍-降价通知',
//        27 => '奇葩说详情-立即阅',
//        28 => '列表页-获取优惠'
//    ];
//
//    //移动端 模板来源
//    public $sourceMrr = [
//            0 => '楼盘首页-优惠获取',
//            1 => '楼盘首页-看房定制',
//            2 => '楼盘首页-立即了解',
//            3 => '团购-立即报名',
//            4 => '团购详情-立即报名',
//            5 =>' 团购详情-报名看房',
//            6 => '视频播放页-了解项目',
//            7 => '资讯详情-立即订阅',
//            8 => '资讯详情-报名看房',
//            9 => '首页-报名看房',
//            10 => '首页-看房专车',
//            11 => '楼盘首页-报名看房',
//            12 => '楼盘首页-降价通知',
//            13 => '楼盘首页-开盘通知我',
//            14 => '底部导航-看房定制',
//            15 => '奇葩说详情-报名看房'
//    ];


    public $stateArr = [
        1 => '失败',
        2 => '成功',
    ];

    public $equipmentArr = [
        1 => '移动端',
        2 => 'PC',
    ];

    public function rules()
    {
        return [
            [['mobile', 'name', 'intention_house', 'intention_city', 'budget', 'intention_housetype', 'hid', 'source', 'equipment'], 'trim'],
            ['mobile', 'match', 'pattern' => '/^1[23456789]\d{9}$/', 'message' => '请输入正确的手机号码'],
            ['name', 'string', 'max' => 5, 'min' => 2],
            [['intention_house', 'intention_city', 'budget', 'intention_housetype'], 'string', 'max' => 100],
            ['equipment', 'in', 'range' => [1, 2], 'message' => '设备来源错误'],
            ['hid', 'number'],
            ['hid', 'default', 'value' => 0],
            ['send_email', 'string'],
            ['ip', 'default', 'value' => \Yii::$app->request->userIP],
            ['source', 'in', 'range' => array_flip((new \common\models\EnrollSource())->TypeColumn(2)), 'on' => 'pcadd'],
            ['source', 'in', 'range' => array_flip((new \common\models\EnrollSource())->TypeColumn(1)), 'on' => 'madd'],
        ];
    }

    public function attributeLabels()
    {
        return [
            'mobile' => '手机号码',
            'intention_house' => '意向楼盘',
            'intention_city' => '意向区域',
            'intention_housetype' => '意向户型',
            'budget' => '预算',
            'name' => '姓名',
            'equipment' => '设备',
            'source' => '来源',
        ];
    }

    public function Authenticator($input)
    {
        $this->load($input, '');
        if ($this->validate()) return $this;
        return $this->errors;
    }

    public function FindById($id)
    {
        return self::findOne($id);
    }

    public function FindByIds()
    {
        $query = self::find();
        $query->select(['pfg_enroll.*', 'pfg_house.name as house_name', 'pfg_category_city.city_name', 'pfg_email.email']);
        $query->andwhere(['pfg_enroll.id' => $this->id]);
        $query->andwhere(['pfg_enroll.del' => $this->setDel]);
        $query->leftJoin('pfg_house', 'pfg_enroll.hid = pfg_house.id');
        $query->leftJoin('pfg_category_city', 'pfg_house.city = pfg_category_city.id or pfg_enroll.b_city = pfg_category_city.id');
        $query->leftJoin('pfg_email', 'pfg_house.city = pfg_email.city');
        return $query->asArray()->one();
    }

    public function getList($page)
    {
        $query = self::find();
        $query->select(['pfg_enroll.*', 'pfg_house.name as house_name', 'pfg_category_city.city_name', 'pfg_house.city as house_city']);
        $query->andwhere(['pfg_enroll.del' => $this->setDel]);
        if (!empty($page['equipment'])) {
            $query->andWhere(['pfg_enroll.equipment' => $page['equipment']]);
        }
        if (!empty($page['hid'])) {
            $query->andWhere(['pfg_enroll.id' => $page['hid']]);
        }
        if (!empty($page['state'])) {
            $query->andWhere(['pfg_enroll.state' => $page['state']]);
        }

        if (isset($page['source_id']) && !empty($page['source_id'])) {
            $sou = explode('-', $page['source_id']);
            $query->andWhere(['pfg_enroll.equipment' => $sou[1]]);
            $query->andWhere(['pfg_enroll.source' => $sou[0]]);
        }

        if (isset($page['source_mobile']) && !empty($page['source_mobile'])) {
            $sou = explode('-', $page['source_mobile']);
            $query->andWhere(['pfg_enroll.equipment' => $sou[1]]);
            $query->andWhere(['pfg_enroll.source' => $sou[0]]);
        }

        if (!empty($page['start_time'])) {
            $start_time = strtotime($page['start_time'] . ' 00:00:00');
            if (!empty($page['end_time'])) {
                $end_time = strtotime($page['end_time'] . ' 23:59:59');
            } else {
                $end_time = $_SERVER['REQUEST_TIME'];
            }

            $query->andWhere(['>=', 'pfg_enroll.create_at', $start_time]);
            $query->andWhere(['<=', 'pfg_enroll.create_at', $end_time]);
        }

        $query->leftJoin('pfg_house', 'pfg_enroll.hid = pfg_house.id');
        $query->leftJoin('pfg_category_city', 'pfg_house.city = pfg_category_city.id or pfg_enroll.b_city = pfg_category_city.id');
//        $query->leftJoin('pfg_email', 'pfg_house.city = pfg_email.city');
        $arr = [];
        if (!empty($page['accurate']) && $page['accurate'] == 1) {
            $query->groupBy(['pfg_enroll.mobile']);
        }
        if (!empty($page['page'])) {
            $count = clone $query;
            $arr['total'] = $count->count();
            $query->offset = ($page['page'] - 1) * $page['limit'];
            $query->limit = $page['limit'];
        } else {
            $query->limit = 20;
        }
        $arr['data'] = $query->orderBy(['pfg_enroll.create_at' => SORT_DESC])->asArray()->all();
        return $arr;
    }

    public function Total($page)
    {
        $query = self::find();
        $query->where(['pfg_enroll.del' => $this->setDel]);
        if (!empty($page['equipment'])) {
            $query->andWhere(['pfg_enroll.equipment' => $page['equipment']]);
        }

        if (isset($page['source_id']) && !empty($page['source_id'])) {
            $sou = explode('-', $page['source_id']);
            $query->andWhere(['pfg_enroll.equipment' => $sou[1]]);
            $query->andWhere(['pfg_enroll.source' => $sou[0]]);
        }

        if (!empty($page['start_time'])) {
            $start_time = strtotime($page['start_time'] . ' 00:00:00');
            if (!empty($page['end_time'])) {
                $end_time = strtotime($page['end_time'] . ' 23:59:59');
            } else {
                $end_time = $_SERVER['REQUEST_TIME'];
            }

            $query->andWhere(['>=', 'pfg_enroll.create_at', $start_time]);
            $query->andWhere(['<=', 'pfg_enroll.create_at', $end_time]);
        }
        $query->leftJoin('pfg_house', 'pfg_enroll.hid = pfg_house.id and pfg_enroll.hid != 0');
        $query->leftJoin('pfg_category_city', 'pfg_house.city = pfg_category_city.id and pfg_enroll.hid != 0');
//        $query->leftJoin('pfg_email', 'pfg_house.city = pfg_email.city and pfg_enroll.hid != 0');
        return $query->count();
    }

    public function SendEmail($page)
    {
        $query = self::find();
        $query->select(['pfg_enroll.*', 'pfg_house.name as house_name', 'pfg_category_city.city_name', 'pfg_email.email']);
        $query->andWhere(['pfg_enroll.del' => $this->setDel]);
        if (!empty($page['id'])) {
            $query->andWhere(['IN', 'pfg_enroll.id', $page['id']]);
        }
        $query->leftJoin('pfg_house', 'pfg_enroll.hid = pfg_house.id');
        $query->leftJoin('pfg_category_city', 'pfg_house.city = pfg_category_city.id or pfg_enroll.b_city = pfg_category_city.id');
        $query->leftJoin('pfg_email', 'pfg_house.city = pfg_email.city');
        $query->orderBy(['pfg_enroll.create_at' => SORT_DESC]);
        return $query->asArray()->all();
    }

}