<?php
defined('BASEPATH') OR exit('No direct script access allowed');

use Coduo\PHPHumanizer\DateTimeHumanizer;

class YoutubePlayerModel extends CI_Model
{

    public function __construct()
    {
        parent::__construct();
    }

    public function getRecommendVideos($id)
    {
        $data = $this->youtubePlayerModel->newestVids('15');

        $return = '';

        if (!empty($data)) {
            foreach ($data as $row) {
                $videoId = $row['contentDetails'];
                $videoId = $videoId['videoId'];
                $title = $this->youtubePlayerModel->getInfos($videoId)['title'];

                if ($id == $videoId) {
                    $return .= '<li>
                        <a onclick="switchVideo(\'' . $videoId . '\');" style="cursor: pointer;">
                            <div class="image-container active">
                                <img src="http://img.youtube.com/vi/' . $videoId . '/maxresdefault.jpg" alt="' . $title . '" class="img-fluid">
                                <div class="overlay"><span>' . $title . '</span></div>
                            </div>
                        </a>
                    </li>';
                } else {
                    $return .= '<li>
                        <a onclick="switchVideo(\'' . $videoId . '\');" style="cursor: pointer;">
                            <div class="image-container">
                                <img src="http://img.youtube.com/vi/' . $videoId . '/maxresdefault.jpg" alt="' . $title . '" class="img-fluid">
                                <div class="overlay"><span>' . $title . '</span></div>
                            </div>
                        </a>
                    </li>';
                }


//                if($id == $videoId) {
//                    $return .= '<a onClick="switchVideo(\'' . $videoId . '\');" class="btn btn-sm btn-default active raised">' .$title. '</a>';
//                } else {
//                    $return .= '<a onClick="switchVideo(\'' . $videoId . '\');" class="btn btn-sm btn-default raised">' .$title. '</a>';
//                }
            }
        } else {
            $return = null;
        }

        return $return;
    }

    public function newestVids($vidCount)
    {
        $data = $this->db->query('SELECT * FROM social_posts WHERE post_plattform = \'YouTube\' ORDER BY post_date DESC LIMIT ?', [$vidCount])->result_array();

        if (!empty($data)) {
            return $data;
        } else {
            return null;
        }
    }

    public function getInfos($id)
    {
        $data = json_decode(@file_get_contents('https://www.googleapis.com/youtube/v3/videos?part=snippet%2Cstatistics&hl=de&id=' . $id . '&regionCode=de&key=AIzaSyAZi6W9FODqd-bjlmV0sGJ8vjvSgFNTXVM'), true)['items'];
        $data = $data[0];
        $infos = $data['snippet'];
        $stats = $data['statistics'];

        $return = [];

        $return['title'] = $infos['title'];
        $description = htmlspecialchars($infos['description']);
        $descriptionList = explode(' ', $description);
        $description = '';
        foreach ($descriptionList as $item) {
            if (isset(parse_url($item)['scheme']) && isset(parse_url($item)['host'])) {
                $description .= '<a href="' . $item . '" target="_blank">' . $item . '</a> ';
            } else {
                if ($infos['channelTitle'] == 'KingOfDog') {
                    $items1 = ['✔️', '➕', '©'];
                    $items2 = ['</p><p>✔️', '<br>➕', '<br>©'];
                    $description .= str_replace($items1, $items2, $item) . ' ';
                } else {
                    $description .= $item . ' ';
                }
            }
        }
        $return['description'] = $description;
        $published = strtotime($infos['publishedAt']);
        $return['published'] = DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$published"), $_SESSION['site_lang']);
        $return['channelName'] = $infos['channelTitle'];
        $return['channelUrl'] = 'http://youtube.com/channel/' . $infos['channelId'];
        $return['views'] = number_format($stats['viewCount'], 0, ',', '.');
        $return['likes'] = $stats['likeCount'];
        $return['dislikes'] = $stats['dislikeCount'];
        $return['comments'] = number_format($stats['commentCount'], 0, ',', '.');
        $rateCount = intval($return['likes']) + intval($return['dislikes']);
        if (intval($return['likes']) > 0 && intval($return['dislikes']) > 0) {
            $return['likeWidth'] = intval($return['likes']) / $rateCount * 100;
            $return['dislikeWidth'] = intval($return['dislikes']) / $rateCount * 100;
            $return['grayWidth'] = 0;
        } elseif (intval($return['likes']) == 0 && intval($return['dislikes']) == 0) {
            $return['likeWidth'] = 0;
            $return['dislikeWidth'] = 0;
            $return['grayWidth'] = 100;
        } elseif (intval($return['likes']) == 0) {
            $return['likeWidth'] = 0;
            $return['dislikeWidth'] = 100;
            $return['grayWidth'] = 0;
        } else {
            $return['likeWidth'] = 100;
            $return['dislikeWidth'] = 0;
            $return['grayWidth'] = 0;
        }
        $return['thumbnails'] = $infos['thumbnails'];

        return $return;
    }

    public function checkVideo($videoID)
    {
        $data = json_decode(@file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=" . $videoID . "&key=AIzaSyAZi6W9FODqd-bjlmV0sGJ8vjvSgFNTXVM"));
        return $data->pageInfo->totalResults !== 0;
    }
}