<?php

namespace GuzzleHttp\Psr7;

use Psr\Http\Message\StreamInterface;

/**
 * Lazily reads or writes to a file that is opened only after an IO operation
 * take place on the stream.
 */
class LazyOpenStream implements StreamInterface {
	use StreamDecoratorTrait;

	/** @var string File to open */
	private $filename;

	/** @var string $mode */
	private $mode;

	/**
	 * @param string $filename File to lazily open
	 * @param string $mode fopen mode to use when opening the stream
	 */
	public function __construct( $filename, $mode ) {
		$this->filename = $filename;
		$this->mode     = $mode;
	}

	/**
	 * Creates the underlying stream lazily when required.
	 *
	 * @return StreamInterface
	 */
	protected function createStream() {
		return stream_for( try_fopen( $this->filename, $this->mode ) );
	}
}
