#!/bin/sh
set -e

if [ ! -e node_modules/moment ] ; then
      pkgjs-ln moment
fi

echo "ESM moment"
node <<'EOF'
import moment from "moment";

if (typeof moment !== "function") {
  throw new Error("ESM: moment is not a function");
}

const s = moment("2020-01-01").format("YYYY-MM-DD");
if (s !== "2020-01-01") {
  throw new Error("ESM: formatting failed");
}
console.log(s);
EOF

echo 'CJS moment'
node <<'EOF'
const moment = require("moment");

if (typeof moment !== "function") {
  throw new Error("CJS: moment is not a function");
}

const s = moment("2020-01-01").format("YYYY-MM-DD");
if (s !== "2020-01-01") {
  throw new Error("CJS: formatting failed");
}
console.log(s);
EOF

echo 'UMD moment'
node <<'EOF'
const isAutopkgtest = !!process.env.AUTOPKGTEST_TMP;
const momentFile = isAutopkgtest ? "/usr/share/javascript/moment/moment.js" : "./dist/moment.js";
// Simulate a browser global environment
global.window = global;
global.self = global;
global.globalThis = global;

// Remove CommonJS so UMD cannot detect Node
module.exports = undefined;
exports = undefined;

// Load the UMD file directly
const fs = require("fs");
const vm = require("vm");

const code = fs.readFileSync(momentFile, "utf8");
vm.runInThisContext(code);

// Now the UMD browser branch runs and sets global.moment
if (typeof global.moment !== "function") {
  throw new Error("UMD: moment global not found");
}

const s = global.moment("2020-01-01").format("YYYY-MM-DD");
if (s !== "2020-01-01") {
  throw new Error("UMD: formatting failed");
}

console.log("UMD OK",s);
EOF

echo 'ESM locale'
node <<'EOF'
const locale = 'fr';
import assert from "node:assert";
import moment from 'moment';
import 'moment/locale/fr';
moment.locale(locale);

const m = moment.localeData('fr').months(moment([2012, 0]));
assert.match(m, /^janvier$/i, "should be janvier");
console.log("ESM locale OK:", locale, m);
EOF

echo 'CJS locale'
node <<'EOF'
const locale = 'fr';
const assert = require("node:assert");
const moment = require('moment');
require('moment/locale/fr');
moment.locale(locale);

const m = moment.localeData('fr').months(moment([2012, 0]));
assert.match(m, /^janvier$/i, "should be janvier");
console.log("CJS locale OK:", locale, m);
EOF

echo 'ESM with moment locale'
node <<'EOF'
const locale = 'fr';
import assert from "node:assert";
import moment from 'moment/min/moment-with-locales';
moment.locale(locale);

const m = moment.localeData('fr').months(moment([2012, 0]));
assert.match(m, /^janvier$/i, "should be janvier");
console.log("ESM locale OK:", locale, m);
EOF

echo 'CJS with moment locale'
node <<'EOF'
const locale = 'fr';
const assert = require("node:assert");
const moment = require('moment/min/moment-with-locales');
moment.locale(locale);

const m = moment.localeData('fr').months(moment([2012, 0]));
assert.match(m, /^janvier$/i, "should be janvier");
console.log("ESM locale OK:", locale, m);
EOF

echo 'UMD moment'
node <<'EOF'
const isAutopkgtest = !!process.env.AUTOPKGTEST_TMP;
const momentFile = isAutopkgtest ? "/usr/share/javascript/moment/moment-with-locales.min.js" : "./min/moment-with-locales.js";
// Simulate a browser global environment
global.window = global;
global.self = global;
global.globalThis = global;

// Remove CommonJS so UMD cannot detect Node
module.exports = undefined;
exports = undefined;

// Load the UMD file directly
const fs = require("fs");
const vm = require("vm");

const code = fs.readFileSync(momentFile, "utf8");
vm.runInThisContext(code);

// Now the UMD browser branch runs and sets global.moment
if (typeof global.moment !== "function") {
  throw new Error("UMD: moment global not found");
}

const m = global.moment.localeData('fr').months(moment([2012, 0]));
if(m.match(/^janvier$/i))
    console.log("UMD OK",m);
else
    throw new Error("UMD: error");

EOF
