<?php

namespace App\Http\Controllers;

use App\Models\Review;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class ReviewController extends Controller
{

    public function registerReview(Request $request) {
        $review = new Review;
        $photo_data = [
            'id'            => $request->id,
            'facility_id'   => $request->facility_id,
            'r_name'        => $request->r_name,
            'r_title'       => $request->r_title,
            'r_date'        => $request->r_date,
            'r_comment'     => $request->r_comment
        ];

        $obj = $review->fill($photo_data)->save();

        if (isset($request->r_photo) && !empty($request->r_photo)) {
            $image_url = $this->saveImage('company_3/review/', $request->r_photo);
            Review::where('id', $request->id)->update(['r_photo' => $image_url]);
        }

        return response()->json([
            'message' => 'Review successfully created',
            'review_id' => $request->id
        ], 201);
    }

    public function updateReview(Request $request) {
        $photo_data = [
            'facility_id'   => $request->facility_id,
            'r_name'        => $request->r_name,
            'r_title'       => $request->r_title,
            'r_date'        => $request->r_date,
            'r_comment'     => $request->r_comment
        ];

        $obj = Review::where('id', $request->id)->first();
        $obj->update($photo_data);

        if (isset($request->r_photo) && !empty($request->r_photo)) {
            $image_url = $this->saveImage('company_3/review/', $request->r_photo);
            Review::where('id', $request->id)->update(['r_photo' => $image_url]);
        }
        if(isset($request->del_photo) && $request->del_photo == 1){
            Storage::disk('public')->delete($obj->r_photo);
            Review::where('id', $request->id)->update(['r_photo' => null]);
        }

        return response()->json([
            'message' => 'Review successfully updated',
            'review_id' => $request->id
        ], 201);
    }

    public function delReview($id) {
        $obj = Review::where('id', $id)->first();

        if (isset($obj->r_photo) && !empty($obj->r_photo)){
            Storage::disk('public')->delete($obj->r_photo);
        }

        $obj->delete();

        return response()->json([
            'message' => 'Review successfully delete',
            'review_id' => $id
        ], 201);
    }

    public function saveImage($folder, $image){
        $url = $image;
        $info = pathinfo($url);
        $arrContextOptions=array(
            "ssl" => array(
                "verify_peer"   =>  false,
                "verify_peer_name"  =>  false,
            ),
        );
        $contents = file_get_contents($url, false, stream_context_create($arrContextOptions));

        $file = $info['basename'];

        if(Storage::disk('public')->exists($folder)){
            Storage::disk('public')->makeDirectory($folder);
        }

        if(Storage::disk('public')->exists($folder.$file)){
            Storage::disk('public')->delete($folder.$file);
        }

        Storage::disk('public')->put($folder.$file, $contents);

        return 'public/'.$folder.$file;
    }
}
