import "load_dotenv";
import { chromium } from "playwright";
import initialSetup from "./scripts/admin/initialSetup.ts";
import login from "./scripts/login.ts";
import { assertSandbox } from "./scripts/guard.ts";
import companySetup, { Company } from "./scripts/admin/companySetup.ts";
import path from "node:path";
import displaySetup from "./scripts/admin/displaySetup.ts";
import moduleSetup from "./scripts/admin/moduleSetup.ts";

/*
  Initialisation
*/
// GARDE D'HÔTE. main.ts pilote l'ASSISTANT D'INSTALLATION (`/install/`) : c'est
// le script le plus destructeur du dépôt. Pointé sur la production avec
// l'environnement ambiant — et `test/.env` porte justement DOLIBARR_ADDRESS sur
// la PRODUCTION — il relancerait l'installeur sur l'ERP réel.
// assertSandbox() n'autorise que le bac à sable, sauf double opt-in explicite
// (ARCO_ALLOW_PRODUCTION + ARCO_PROD_CONFIRM) pour l'installation initiale d'un
// nouvel environnement, qui reste un geste d'opérateur.
const dolibarrAddress = assertSandbox();
const debug = true;
const DBpassword = Deno.env.get("DOLI_DB_PASSWORD") || "undefined";
const adminCredentials = {
  username: Deno.env.get("DOLI_ADMIN_LOGIN") || "undefined",
  password: Deno.env.get("DOLI_ADMIN_PASSWORD") || "undefined",
};

const rootFolderPath = Deno.env.get("ROOT_FOLDER") ||
  "/Users/gabrielradureau/Work/Arcodange/erp";
const imgFolderPath = Deno.env.get("IMG_FOLDER") ||
  path.join(rootFolderPath, "static/img");
const configFolderPath = Deno.env.get("CONFIG_FOLDER") ||
  path.join(rootFolderPath, "static/config");

const browser = await chromium.launch({
  headless: false,
  logger: {
    isEnabled: (_name, _severity) => debug,
    log: (name, severity, message, args) =>
      console.warn(`${severity}| ${name} :: ${message} __ ${args}`),
  },
});
const context = await browser.newContext({ locale: "fr-FR" });
const page = await context.newPage();

const globalCtx = {
  dolibarrAddress,
  DBpassword,
  adminCredentials,

  debug,
  rootFolderPath,
  imgFolderPath,
  configFolderPath,

  browser,
  page,
  context,
};

// if (!await initialSetup.isUpgradeLocked(globalCtx)) {
//   await initialSetup.doFirstInstall(globalCtx);
// } else {
//   console.log("Installation et Mises à jours bloquée par fichier .lock.");
// }

// await login.doAdminLogin(globalCtx);
// console.log(`connected as ${await login.whoAmI(globalCtx)}`);

// const company = JSON.parse(
//   await Deno.readTextFile(
//     path.join(globalCtx.configFolderPath, "company.json"),
//   ),
// ) as Company;

// await companySetup.setupCompany(globalCtx, company);

try {
  // await displaySetup.setupDisplay(globalCtx);
  await moduleSetup.configureModule(globalCtx, {moduleName: 'TIERS' , enabled: true, onConfiguration: async () => {
    await globalCtx.page.screenshot({path: 'save.png'})
  }});
} catch (error) {
  console.error(error);
}

// await browser.close();
