<?php

namespace App\Console\Commands\Keeng;

use App\Helpers\Constants;
use App\Models\Crontjob;
use App\Models\Track;
use App\Repositories\TrackRepository;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;

class KeengCrawlerByCateCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'keeng:get-track-by-cate';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Lấy những bài hát mới phát hành';

    protected $trackRepository;

    /**
     * Create a new command instance.
     *
     * KeengCrawlerByCateCommand constructor.
     * @param TrackRepository $trackRepository
     */
    public function __construct(TrackRepository $trackRepository)
    {
        parent::__construct();
        ini_set('max_execution_time', -1);
        $this->trackRepository = $trackRepository;
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        echo "\nBắt đầu xử lý lấy 100 bài hát theo từng trang từ Keeng.";

        // Lấy mảng ID của Zing những bài hát đã insert
        $inserted = $this->trackRepository->getTrackInserted('title', 'original', []);

        // Lấy ds BXH về
        $domain = config('api.keeng.domain');
        $tracks = [];
        $index = 0;
        for ($i = 1; $i <= 5; $i++) {
            $url = getKeengUrlCategoryByPopViet($i);
            $curl = cURL($url);
            $data = json_decode($curl);
            if (isset($data->data)) {
                foreach ($data->data as $key => $track) {
                    $tracks[$index]['title'] = isset($track->name) ? $track->name : 'unknown-title';
                    $tracks[$index]['slug'] = isset($track->slug) ? $track->slug : null;
                    $tracks[$index]['userid'] = 0;
                    $tracks[$index]['tag'] = 'vmusic';
                    $tracks[$index]['genre'] = 1;
                    $tracks[$index]['download_hash'] = md5($track->id);
                    $tracks[$index]['time'] = time();
                    $tracks[$index]['link_keeng'] = isset($track->url) ? $track->url : null;
                    $tracks[$index]['id_keeng'] = isset($track->identify) ? $track->identify : null;
                    $tracks[$index]['singer_list'] = isset($track->singer) ? $track->singer : null;
                    $tracks[$index]['composer_list'] = isset($track->info_extra->author_name) ? $track->info_extra->author_name : null;
                    $tracks[$index]['src_thumbnail'] = isset($track->image) ? $track->image : null;
                    $tracks[$index]['src_thumbnail_medium'] = isset($track->image310) ? $track->image310 : null;
                    $index++;
                }
            }
        }

        $bulk_track_insert = [];
        $bulk_track_update = [];
        $key_insert = 0;
        $key_update = 0;
        foreach ($tracks as $key => $track) {
            // Xử lý insert/update dựa vào tên bài hát
            if (is_array($inserted) && count($inserted) > 0 && in_array($track['title'], $inserted)) {
                $track_db = Track::where('title', $track['title'])->take(1)->get();
                if (isset($track_db[0])) {
                    $track_db[0]->link_keeng = $track['link_keeng'];
                    $track_db[0]->id_keeng = $track['id_keeng'];
                    if (empty($track_db[0]->singer_list)) {
                        $track_db[0]->singer_list = $track['singer_list'];
                    }
                    if (empty($track_db[0]->composer_list)) {
                        $track_db[0]->composer_list = $track['composer_list'];
                    }
                    $track_db[0]->crawler_at = Carbon::now();
                    $track_db[0]->save();
                }

                $key_update++;
            } else {
                $bulk_track_insert[$key_insert]['title'] = $track['title'];
                $bulk_track_insert[$key_insert]['slug'] = $track['slug'];
                $bulk_track_insert[$key_insert]['userid'] = 0;
                $bulk_track_insert[$key_insert]['tag'] = 'vmusic';
                $bulk_track_insert[$key_insert]['genre'] = 1;
                $bulk_track_insert[$key_insert]['download_hash'] = md5($track['download_hash']);
                $bulk_track_insert[$key_insert]['time'] = time();
                $bulk_track_insert[$key_insert]['link_keeng'] = $track['link_keeng'];
                $bulk_track_insert[$key_insert]['id_keeng'] = $track['id_keeng'];
                $bulk_track_insert[$key_insert]['singer_list'] = $track['singer_list'];
                $bulk_track_insert[$key_insert]['composer_list'] = $track['composer_list'];
                $bulk_track_insert[$key_insert]['src_thumbnail'] = $track['src_thumbnail'];
                $bulk_track_insert[$key_insert]['src_thumbnail_medium'] = $track['src_thumbnail_medium'];
                $bulk_track_insert[$key_insert]['crawler_at'] = Carbon::now();

                $key_insert++;
            }
        }

        echo "\nSố bài hát insert: " . $key_insert;
        echo "\nSố bài hát update: " . $key_update;

        if ($key_insert > 0) {
            DB::table(Constants::TABLE_TRACKS)->insert($bulk_track_insert);
            echo "\nInsert thành công.";
        } else {
            echo "\nKhông lấy được bài hát nào.";
        }

        // Ghi log
        Crontjob::create(['message' => 'KeengCrawlerByCateCommand is called at ' . Carbon::now()]);
    }
}