<?php


namespace calderawp\calderaforms\cf2\Jobs;


/**
 * Class DeleteFileJob
 *
 * Delete a file at a later time
 *
 * @since 1.8.0
 */
class DeleteFileJob extends Job
{

	/**
	 * Path file is stored in
	 *
	 * @since 1.8.0
	 *
	 * @var string
	 */
	protected $path;

	/**
	 * DeleteFileJob constructor.
	 *
	 * @since 1.8.0
	 *
	 * @param string $path Path file is stored in
	 */
	public function __construct($path)
	{
		if ( is_array($path) && isset($path['file']) ) {
			$this->path = $path['file'];
		} elseif ( is_string($path) ) {
			$this->path = $path;
		} else {
			throw new \InvalidArgumentException('Path must be a string or an array with a "file" key');
		}
	}

	/** @inheritdoc */
	public function handle()
	{
		// make sure $this->path contains the filename
		if ( is_array($this->path) && isset($this->path['file']) ) {
			$this->path = $this->path['file'];
		}

		if ( file_exists($this->path) ) {
			unlink($this->path);
		}

		if( file_exists( $this->dirName() ) && $this->isEmptyDir() ){
			rmdir(dirname($this->path));
		}

	}

	/**
	 * Check if is empty directory
	 *
	 * @since 1.8.0
	 *
	 * @return bool
	 */
	protected function isEmptyDir()
	{
		foreach ( new \DirectoryIterator($this->dirName()) as $fileInfo ) {
			if ( $fileInfo->isDot() ) {
				continue;
			};
			return false;
		}
		return true;
	}

	/**
	 * Get name of directory file is in
	 *
	 * @since 1.8.0
	 *
	 * @return string
	 */
	protected function dirName()
	{
		return dirname($this->path);
	}
}
