<?php namespace Source\Lib;
use Dever;
class Collection
{
    public function update($data)
    {
        $info_data = Dever::db('info_data', 'source')->find($data['info_data_id']);
        if ($info_data['relation'] == 2) {
            $info_data_list = Dever::db('info_data', 'source')->select(array('info_id' => $info_data['info_id'], 'type' => 3, 'status' => 1));
            if (!$info_data_list) {
                # commit 不管用，暂时先删除吧
                Dever::db('info_data_collection', 'source')->delete($data['id']);
                Dever::error('暂无短视频素材');
            }
        } elseif ($info_data['relation'] == 3) {
            $info_data_list = Dever::db('info_data_value', 'source')->select(array('info_data_id' => $info_data['id'], 'status' => 1));
            if (!$info_data_list) {
                Dever::db('info_data_collection', 'source')->delete($data['id']);
                Dever::error('暂无短视频素材');
            }
        }
        
        $video = array();
        foreach ($info_data_list as $k => $v) {
            if (!isset($v['file'])) {
                $data_video = Dever::db('info_data_video', 'source')->find(array('info_data_id' => $v['id']));
                $v['file'] = $data_video['file'] ?? false;
            } else {
                $info_data_temp = Dever::db('info_data', 'source')->find($v['info_data_id']);
                $v['relation_id'] = $info_data_temp;
            }
            
            if ($v['file']) {
                $video[] = Dever::load('view', 'upload')->local($v['file']);
                continue;
            }
            $info_value = Dever::db('info_value', 'source')->find($v['relation_id']);
            if ($info_value && $info_value['value']) {
                $video[] = Dever::load('view', 'upload')->local($info_value['value']);
            }
        }

        if ($video) {
            $file = Dever::load('video', 'api')->merge($video, $data['id']);
            $file = Dever::load('view', 'upload')->http($file);
            Dever::db('info_data_collection', 'source')->update(array('id' => $data['id']), array('file' => $file));
        }
        return $data;
    }

    public function getText($text, $data)
    {
        if (strpos($text, '{') !== false && strpos($text, '{"') === false) {
            $func = function ($r) use ($data) {
                if (isset($data[$r[1]])) {
                    return $data[$r[1]];
                }
                return false;
            };
            $text = preg_replace_callback('/{(.*?)}/', $func, $text);
        }
        $eval = '$text = "' . $text . '";';
        @eval($eval);
        return $text;
    }
}