<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Photo;
use App\Jobs\PhotoDelete;

class PhotoController extends Controller
{
	protected $list_duplicates = 20;
	protected $list_deletes = 50;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    public function delete($id)
    {
		$po = Photo::notRemove()->findOrFail($id);

		if ($po)
		{
			$po->remove = TRUE;
			$po->save();
		}

		return redirect()->action('PhotoController@info',[$id]);
    }

    public function deletes($id=NULL)
    {
		return view('catalog.deletereview',[
			'return'=>url('p/deletes'),
			'catalog'=>is_null($id) ? Photo::where('remove',1)->with('software.model.make')->paginate($this->list_deletes) : Photo::where('id',$id)->paginate(1)
		]);
    }

    public function deletesUpdate(Request $request)
    {
		foreach ($request->input('remove') as $id=>$k)
		{
			$o = Photo::findOrFail($id);

			if ($o->remove AND $request->input('remove.'.$id))
				$this->dispatch((new PhotoDelete($o))->onQueue('delete'));
		}

		return redirect()->action('PhotoController@deletes',$request->input('pagenext') ? '?page='.$request->input('pagenext') : NULL);
    }

    public function duplicates($id=NULL)
    {
		return view('catalog.duplicatereview',[
			'return'=>url('p/duplicates'),
			'catalog'=>is_null($id) ? Photo::notRemove()->where('duplicate',1)->with('software.model.make')->paginate($this->list_duplicates) : Photo::where('id',$id)->paginate(1)
		]);
    }

    public function duplicatesUpdate(Request $request)
    {
		foreach ($request->input('items') as $id)
		{
			$po = Photo::findOrFail($id);

			// Set if duplicate
			$po->duplicate = $request->input('duplicate.'.$id) ? 1 : NULL;

			// Set if flag
			$po->flag = $request->input('flag.'.$id) ? 1 : NULL;

			// Set if delete
			$po->remove = $request->input('remove.'.$id) ? 1 : NULL;

			$po->save();
		}

		return redirect()->action('PhotoController@duplicates','?page='.$request->input('page'));
    }

    public function info(Photo $o)
    {
		return view('photo.view',['o'=>$o]);
    }

    public function thumbnail($id)
    {
		return response(Photo::findOrFail($id)->thumbnail(TRUE))->header('Content-Type','image/jpeg');
    }

    public function undelete($id)
    {
		$po = Photo::findOrFail($id);

		if ($po)
		{
			$po->remove = NULL;
			$po->save();
		}

		return redirect()->action('PhotoController@info',[$id]);
    }

    public function view($id)
    {
		return response(Photo::findOrFail($id)->image())->header('Content-Type','image/jpeg');
    }
}