import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import * as path from 'path';
import * as fs from 'fs';

const rootFolder = path.resolve(__dirname, '../..');
const filesFolder = path.resolve(__dirname, '../..', 'public');

@Injectable()
export class FileService {
  async createFile(file, fileName, folder): Promise<string> {
    try {
      if (!fs.existsSync(filesFolder)) {
        fs.mkdirSync(filesFolder, { recursive: true });
      }

      if (!fs.existsSync(path.resolve(filesFolder, folder))) {
        fs.mkdirSync(path.resolve(filesFolder, folder), { recursive: true });
      }
      await fs.promises.writeFile(
        path.resolve(filesFolder, folder, fileName),
        file.buffer,
      );
      return 'public/' + folder + '/' + fileName;
    } catch (e) {
      throw new HttpException(e.message, HttpStatus.INTERNAL_SERVER_ERROR);
    }
  }

  async getFile(filePath) {
    if (!fs.existsSync(path.resolve(rootFolder, filePath))) {
      return '';
    }

    const ext = filePath.split('.').pop();
    const base64 = fs.readFileSync(path.resolve(rootFolder, filePath), {
      encoding: 'base64',
    });

    return `data:image/${ext};base64,${base64}`;
  }

  removeFile(fileName: string) {
    fs.unlinkSync(path.resolve(filesFolder, fileName));
  }
}
