<?php
namespace nur\b\io;

use nur\base;

class FileReader extends StreamReader {
  const DEFAULT_MODE = "rb";

  /** @throws IOException */
  function __construct($input, string $mode=self::DEFAULT_MODE) {
    $close = false;
    $file = null;
    if (base::z($input)) {
      $fd = STDIN;
    } elseif (is_resource($input)) {
      $fd = $input;
    } elseif (is_string($input)) {
      $fd = IOException::ensure_not_false(@fopen($input, $mode), "open");
      $close = true;
      $file = $input;
    }
    parent::__construct($fd, $close);
    $this->file = $file;
  }

  protected $file;

  function getContents(bool $close=true): string {
    if ($this->file === null) return parent::getContents();
    try {
      return file_get_contents($this->file);
    } finally {
      $this->close($close);
    }
  }
}
