import {join, dirname} from "node:path";
import {test, expect} from "@jest/globals";

import { rollup } from "rollup";
import urlPlugin from "@rollup/plugin-url";

import {debugPrintOutput, getCode} from "../util/index.ts";

import html from "../../src/index.ts";

const output = {
  dir: 'output', // Output all files
  format: 'es', //  iifi and cjs should be added to tests
  sourcemap: true,// Test if #sourcemapUrl is not accidentally included in the html-output
};

import {fileURLToPath} from "node:url";
const __dirname = dirname(fileURLToPath(import.meta.url));
process.chdir(join(__dirname, 'fixtures'));


const defaultAssetInclude = [
  '**/*.(png|jpg|jpeg|gif|ico|svg)',// images, svg
  '**/*.(woff|woff2|eot|ttf|otf)',// fonts
  '**/*.(webm|mp4)',// video
];

describe("url-plugin", ()=>{
  test('copied-assets', async () => {
    const bundle = await rollup({
      input: 'index.html',
      plugins: [
        html({
        }),
        urlPlugin({
          include: defaultAssetInclude,
          limit: 0,// Never inline something
        }),
      ],
    });
    const code = await getCode(bundle, output);
    debugPrintOutput('copied-assets',code);
    expect(code).toMatchSnapshot();
  });


  test('inlined-assets', async () => {
    const bundle = await rollup({
      input: 'index.html',
      plugins: [
        html({
        }),
        urlPlugin({
          include: defaultAssetInclude,
          limit: Number.MAX_SAFE_INTEGER,// Always inline things
        }),
      ]
    });
    const code = await getCode(bundle, output);
    debugPrintOutput('inlined-assets',code);
    expect(code).toMatchSnapshot();
  });
})


// TODO various parameters
//  - format: cjs, iifi, ...
//  - sourcemap: inline, false, (and the various exotic sourcemap options)
// Watch mode tests would be its own dir
// ...
