<?php
/**
 * @link      http://www.u-bo.com
 * @copyright 南京友博网络科技有限公司 
 * @license   http://www.u-bo.com/license/
 */

namespace common\widgets;

use yii\helpers\Html;
use yii\base\InvalidConfigException;
use common\assets\My97DatePickerAsset;

/**
 * 日期选择插件,使用my97
 * 
 * 调用方法如下：
 * <?= DatePicker::widget([
 * 'model' => $model, 
 * 'form' => $form, 
 * 'attribute' => 'time', 
 * 'format' => 'yyyy-MM-dd HH:mm:ss',
 * ]) ?>
 * 
 * @author legendjw http://blog.u-bo.com
 * @since 0.1
 */
class DatePicker extends \yii\base\Widget 
{

	/**
	 * @var array 日期选择器的配置
	 */
	public $dateConfig = [];

	/**
	 * @var string 设定触发日期选择器的触发事件类型，比如onclick、onfocus
	 */
	public $event = 'onfocus';

	/**
	 * @var string 日期的格式 
	 * 常见的几种
	 * <example>
	 * yyyy-MM-dd HH:mm:ss	2008-03-12 19:20:00
	 * yy年M月	08年3月
	 * yyyyMMdd	20080312
	 * 今天是:yyyy年M年d HH时mm分	今天是:2008年3月12日 19时20分
	 * H:m:s	19:20:0
	 * y年	8年
	 * MMMM d, yyyy	三月 12, 2008
	 * </example>
	 * 更多详细参数请阅读my97官方说明 http://www.my97.net/dp/demo/resource/2.2.asp
	 */
	public $format = 'yyyy-MM-dd';

	/**
	 * @var bool 输入框是否只读 
	 */
	public $readOnly = false;

	/**
	 * @var string 模型属性
	 */
	public $attribute;

	/**
	 * @var object 表单插件对象
	 * 用于调取生成input元素
	 */
	public $form;

	/**
	 * @var array 字段配置
	 */
	public $fieldConfig = [];

	/**
	 * @var array input配置 
	 */
	public $inputConfig = [];

    /**
     * @var string 日期框的值，当不使用from插件生成值时使用
     */
    public $inputValue = '';

	/**
	 * @var object 当前操作表单的模型
	 * 用于获取当前模型的值和一些验证规则
	 */
	public $model;

	public function init() 
	{
		parent::init();
		if ($this->attribute === null) {
            throw new InvalidConfigException('插件参数缺失');
		}
	}

	public function run() 
	{
		$this->registerAsset();

		$this->inputConfig[$this->event] = 'WdatePicker(' . $this->getOptions() . ')';

        if ($this->form !== null && $this->model !== null) {
            $input = $this->form->field($this->model, $this->attribute, $this->fieldConfig)->textInput($this->inputConfig);
        }
        else {
            $input = Html::input('text', $this->attribute, $this->inputValue, $this->inputConfig);
        }
        return $input;
	}

	/**
	 * 注册js资源
	 */
	private function registerAsset()
	{
		$view = $this->getView();
		//注册资源
		My97DatePickerAsset::register($view);
	}

	/**
	 * 获取日期选项
	 */
	private function getOptions()
	{
		$this->dateConfig['readOnly'] = (isset($this->dateConfig['readOnly'])) ? $this->dateConfig['readOnly'] : $this->readOnly ;
		$this->dateConfig['dateFmt'] = (isset($this->dateConfig['dateFmt'])) ? $this->dateConfig['dateFmt'] : $this->format ;
		$options = json_encode($this->dateConfig);
		return $options;
	}

}
