package li.cil.oc.server.fs

import dan200.computer.api.IWritableMount
import li.cil.oc.api.fs.Mode

class ComputerCraftWritableFileSystem(override val mount: IWritableMount)
  extends ComputerCraftFileSystem(mount)
  with OutputStreamFileSystem {

  override def delete(path: String) = try {
    mount.delete(path)
    true
  } catch {
    case _: Throwable => false
  }

  override def makeDirectory(path: String) = try {
    mount.makeDirectory(path)
    true
  } catch {
    case _: Throwable => false
  }

  override protected def openOutputStream(path: String, mode: Mode) = try {
    Some(mode match {
      case Mode.Append => mount.openForAppend(path)
      case Mode.Write => mount.openForWrite(path)
      case _ => throw new IllegalArgumentException()
    })
  } catch {
    case _: Throwable => None
  }
}
