<?php

namespace App\Jobs;

use Illuminate\Support\Facades\Log;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

use App\Models\Photo;

class PhotoDelete extends Job implements ShouldQueue
{
	use InteractsWithQueue,SerializesModels;

	private $photo;

	/**
	 * Create a new job instance.
	 *
	 * @return void
	 */
	public function __construct(Photo $photo)
	{
		$this->photo = $photo;
	}

	/**
	 * Execute the job.
	 *
	 * @return void
	 */
	public function handle()
	{
		if (! $this->photo->remove)
		{
			Log::warning(sprintf('%s: NOT Deleting [%s] not marked for deletion',__METHOD__,$this->photo->file_path()));
			exit;
		}

		// Remove tags;
		if ($this->photo->Tags->count())
			$this->photo->Tags()->detach();

		// Remove People;
		if ($this->photo->People->count())
			$this->photo->People()->detach();

		// Make sure our parent is writable
		if (! is_writable(dirname($this->photo->file_path())))
			Log::warning(sprintf('%s: NOT Deleting [%s] parent directory not writable',__METHOD__,$this->photo->file_path()));

		// Perform delete
		if (file_exists($this->photo->file_path()))
			unlink($this->photo->file_path());

		Log::warning(sprintf('%s: Deleted [%s]',__METHOD__,$this->photo->file_path()));
		$this->photo->delete();
	}
}