<?php

namespace App\Http\Controllers;

use App\Photo;
use App\Seo;
use Illuminate\Http\Request;
use Cache;
use Illuminate\Support\Facades\Route;

/**
 * Class HomeController
 *
 * @package App\Http\Controllers
 */
class HomeController extends Controller
{
    public function index(Request $request)
    {
        /*$seoMeta = Seo::where('uri', $uri)->first();
        $cacheName = str_replace("/", "-", trim($uri));
        $seoMeta = Cache::remember($cacheName, 30, function() use ($uri) {
            return Seo::where('uri', $uri)->first();
        });*/

        $uri = $request->getRequestUri();
        $uri = urldecode($uri);
        $uri = $uri . "||";
        $uri = str_replace("//", "/", "/" . $uri);
        $uri = str_replace("/?", "?", $uri);
        $uri = str_replace("?&", "?", $uri);
        $uri = str_replace("&&", "&", $uri);
        $uri = str_replace("/||", "", $uri);
        $uri = str_replace("||", "", $uri);
        $uri = preg_replace('/(?:&|(\?))page=[^&]*(?(1)&|)?/i', "$1", $uri);
        if ($uri == null || $uri == "") $uri = "/";

        $seoMeta = Seo::where('uri', $uri)->first();
        if (!$seoMeta && strpos($uri, "/column/detail/") !== false) {
            $idPostArr = str_replace("/column/detail/", "", $uri);
            $idPostArr = explode("/", $idPostArr);
            $idPost = $idPostArr[0];
            $seoMeta = Seo::where('uri', 'like', "/column/detail/" . $idPost . "/%")->first();
        } else if (!$seoMeta && strpos($uri, "/bbs/detail/") !== false) {
            $idPostArr = str_replace("/bbs/detail/", "", $uri);
            $idPostArr = explode("/", $idPostArr);
            $idPost = $idPostArr[0];
            $seoMeta = Seo::where('uri', 'like', "/bbs/detail/" . $idPost . "/%")->first();
        }

        /*if(isset($seoMeta) && $seoMeta->id != null) {
            $data['title'] = $seoMeta->title;
            $data['keywords'] = $seoMeta->keywords;
            $data['description'] = $seoMeta->description;
            $imgSeo = ($seoMeta->image != "" && $seoMeta->image != null) ? $seoMeta->image : 'favicon-16x16.png';
            $data['image'] = url("files/" . $imgSeo);
        } else {
            $data = ['title' => config('settings.site_name'), 'keywords' => '', 'description' => '', 'image' => url('favicon-16x16.png')];
        }*/

        //$data = ['title' => config('settings.site_name'), 'keywords' => '', 'description' => '', 'image' => url('favicon-16x16.png')];
        $data = ['title' => 'KYUSO POSTER SYSTEM', 'keywords' => '', 'description' => '', 'image' => url('favicon-16x16.png')];

        return view('home', $data);
    }

    public function note(Request $request)
    {
        $uri = $request->getRequestUri();
        $uri = urldecode($uri);
        $uri = $uri . "||";
        $uri = str_replace("/profile/", "", $uri);
        $uri = str_replace("//", "/", "/" . $uri);
        $uri = str_replace("/?", "?", $uri);
        $uri = str_replace("?&", "?", $uri);
        $uri = str_replace("&&", "&", $uri);
        $uri = str_replace("/||", "", $uri);
        $uri = str_replace("||", "", $uri);
        $uri = preg_replace('/(?:&|(\?))page=[^&]*(?(1)&|)?/i', "$1", $uri);
        if (strpos($uri, "search=1") !== false) $uri = "/fortune-teller?search=1";
        $seoMeta = Seo::where('uri', $uri)->first();

        if (isset($seoMeta) && $seoMeta->id != null) {
            $data['title'] = $seoMeta->title;
            $data['keywords'] = $seoMeta->keywords;
            $data['description'] = $seoMeta->description;
            $imgSeo = ($seoMeta->image != "" && $seoMeta->image != null) ? $seoMeta->image : 'no-image.png';
            $data['image'] = url("files/" . $imgSeo);
        } else {
            $data = ['title' => config('settings.site_name'), 'keywords' => '', 'description' => '', 'image' => url('favicon-16x16.png')];
        }

        return view('note', $data);
    }

    public function createMix(Request $request)
    {
        $id = $request->has('id') ? $request->get('id') : 1;

        $data = [];
        $photo = Photo::select('*')
            ->where('id', $id)
            ->orderBy('id')
            ->first();

        echo "<pre>";
        print_r($photo->toArray());
        echo "</pre>";
        die();

        return view('mix', $data);
    }

    public function storeMix(Request $request)
    {

    }

    public function checkList(Request $request, $from, $to)
    {
        $rs = Photo::where('id', '>=', $from)->where('id', '<=', $to)->orderBy('id')->get();
        $mode = 0;
        if ($request->has('mode') && ($request->get('mode') == "1" || $request->get('mode') == "2" || $request->get('mode') == "3")) {
            $mode = $request->get('mode');
        }

        return view('check', ['photos' => $rs, 'mode' => $mode]);
    }

    public function mappingResult(Request $request)
    {
        if (!$request->has('f')) return abort(404);

        $path = public_path('uploads/colors/');
        $imgPath = $request->get('f');
        $logFile = $path . $imgPath . "/list.txt";
        if (!file_exists($logFile)) return abort(404);
        $count = 0;
        $imgUrl = url('/uploads/files/aws');
        if (env("APP_URL") == "http://127.0.0.1:8000") {
            $imgUrl = "http://ai.gxo.co.jp/uploads/files/aws";
        }

        $list = [];
        $fileHandle = fopen($logFile, "r+");
        while (!feof($fileHandle)) {
            $line = fgets($fileHandle);
            $line = trim(str_replace("\r\n", "", $line));
            if ($line == "") continue;
            $arr = explode("|", $line);
            $id = $arr[1];
            $photo = Photo::where('id', $id)->first();
            if ($photo->file_color != null && $photo->file_color != "" && $photo->rs_status == 3) continue;

            $list[] = [
                'id'    => $id,
                'img'   => $imgUrl . "/" . $photo->file_url,
                'color' => url('/uploads/colors/' . $imgPath) . "/" . $arr[0],
            ];

            $count++;
        }
        fclose($fileHandle);

        return view('mapping', ['photos' => $list, 'folderName' => $imgPath]);
    }

    public function mappingStore(Request $request)
    {
        $params = $request->all();
        $id = $params['id'];
        $color = $params['color'];
        $folderName = $params['folderName'];
        $path = public_path('uploads/files/aws/');

        $photo = Photo::where('id', $id)->first();
        if ($photo->file_color != null && $photo->file_color != "" && $photo->rs_status == 3) return response()->json(['status' => 'success'], 200);
        $cFile = public_path('uploads/colors/') . $folderName . "/" . $color;

        $fileUrl = $photo->file_url;
        $fileColor = str_replace(".jpeg", ".png", $fileUrl);
        $fileMix = str_replace(".jpeg", "_mix.png", $fileUrl);

        if (file_exists($cFile)) {
            copy($cFile, $path . $fileColor);
            $this->base64_to_png($params['screenshot'], public_path('uploads/files/aws/' . $fileMix));
        }

        $photo->update([
            'file_color' => $fileColor,
            'file_mix'   => $fileMix,
            'rs_status'  => 3,
            'updated_at' => date('Y-m-d H:i:s')
        ]);

        return response()->json(['status' => 'success'], 200);
    }

    public function base64_to_png($base64_string, $output_file)
    {
        $ifp = fopen($output_file, 'wb');
        $data = explode(',', $base64_string);
        fwrite($ifp, base64_decode($data[1]));
        fclose($ifp);

        return $output_file;
    }
}
