import * as plugins from './plugins.js';
import * as interfaces from './interfaces.js';
import * as helpers from './helpers.js';
import type { Bucket } from './classes.bucket.js';
import type { Directory } from './classes.directory.js';
import type { File } from './classes.file.js';


export class Trash {
  public bucketRef: Bucket;

  constructor(bucketRefArg: Bucket) {
    this.bucketRef = bucketRefArg;
  }

  public async getTrashDir() {
    return this.bucketRef.getDirectoryFromPath({ path: '.trash' });
  }

  public async getTrashedFileByOriginalName(pathDescriptor: interfaces.IPathDecriptor): Promise<File> {
    const trashDir = await this.getTrashDir();
    const originalPath = await helpers.reducePathDescriptorToPath(pathDescriptor);
    const trashKey = await this.getTrashKeyByOriginalBasePath(originalPath);
    return trashDir.getFileStrict({ path: trashKey });
  }

  public async getTrashKeyByOriginalBasePath (originalPath: string): Promise<string> {
    return plugins.smartstring.base64.encode(originalPath);
  }
}
