"use strict";
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
  // If the importer is in node compatibility mode or this is not an ESM
  // file that has been converted to a CommonJS file using a Babel-
  // compatible transform (i.e. "__esModule" has not been set), then set
  // "default" to the CommonJS "module.exports" for node compatibility.
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
  mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var configuration_seeds_exports = {};
__export(configuration_seeds_exports, {
  configurationsSeeder: () => configurationsSeeder
});
module.exports = __toCommonJS(configuration_seeds_exports);
var import_client = require("@prisma/pg/client");
var import_fs = __toESM(require("fs"));
var import_encryption = require("../../services/encryption.service");
const prisma = new import_client.PrismaClient();
function getCurrentUtcTime() {
  return (/* @__PURE__ */ new Date()).toISOString();
}
const configurationsSeed = JSON.parse(
  import_fs.default.readFileSync(__dirname + "/json/configurations.json", "utf-8")
);
async function configurationsSeeder(company_id) {
  try {
    let user = await prisma.user.findFirst({
      where: { company_id, role: "super_admin" }
    });
    if (!user) {
      console.log(
        `Role seeder failed: admin user not available for company id ${company_id}`
      );
      return false;
    }
    const createdBy = user.id;
    const utcNow = getCurrentUtcTime();
    for (const catType of configurationsSeed) {
      const categoryType = await prisma.categoryTypes.upsert({
        where: {
          company_id_name: { company_id, name: catType.cat_type_name }
        },
        update: {
          category_type_id: catType.category_type_id,
          name: catType.cat_type_name,
          description: catType.cat_type_description,
          company_id,
          updated_by: createdBy,
          updated_at: utcNow
        },
        create: {
          category_type_id: catType.category_type_id,
          name: catType.cat_type_name,
          description: catType.cat_type_description,
          company_id,
          created_by: createdBy,
          created_at: utcNow
        }
      });
      if (catType.cats) {
        if (catType.cats.length) {
          for (const category of catType.cats) {
            const newCategory = await prisma.categories.upsert({
              where: {
                //company_id_category_id_name: { company_id, category_id: category.category_id, name: category.cat_name },
                company_id_category_type_id_category_id_name: {
                  company_id,
                  category_type_id: category.category_type_id,
                  category_id: category.category_id,
                  name: category.cat_name
                }
              },
              update: {
                category_id: category.category_id,
                name: category.cat_name,
                description: category.cat_description,
                category_type_id: categoryType.category_type_id,
                company_id,
                updated_by: createdBy,
                updated_at: utcNow
              },
              create: {
                category_id: category.category_id,
                name: category.cat_name,
                description: category.cat_description,
                category_type_id: categoryType.category_type_id,
                company_id,
                created_by: createdBy,
                created_at: utcNow
              }
            });
            if (category.cat_configs) {
              if (category.cat_configs.length) {
                for (const config of category.cat_configs) {
                  const configFileValue = config.config_file_value;
                  let encryptedValue = null;
                  if (config.config_value) {
                    const stringValue = import_encryption.encryptionService.valueToString(
                      config.config_value
                    );
                    const encrypted = import_encryption.encryptionService.encryptData(stringValue);
                    encryptedValue = encrypted;
                  }
                  await prisma.configurations.upsert({
                    where: {
                      company_id_config_key: {
                        company_id,
                        config_key: config.config_key
                      }
                    },
                    update: {
                      order_no: config.order_no,
                      config_key: config.config_key,
                      config_value: encryptedValue,
                      config_select_json: config.config_select_json ? config.config_select_json : null,
                      config_file_value: configFileValue,
                      config_value_type: config.config_value_type,
                      config_field_type: config.config_field_type,
                      category_id: newCategory.category_id,
                      category_type_id: categoryType.category_type_id,
                      company_id,
                      updated_by: createdBy,
                      updated_at: utcNow
                    },
                    create: {
                      order_no: config.order_no,
                      config_key: config.config_key,
                      config_value: encryptedValue,
                      config_select_json: config.config_select_json ? config.config_select_json : null,
                      config_file_value: configFileValue,
                      config_value_type: config.config_value_type,
                      config_field_type: config.config_field_type,
                      category_id: newCategory.category_id,
                      category_type_id: categoryType.category_type_id,
                      company_id,
                      created_by: createdBy,
                      created_at: utcNow
                    }
                  });
                }
              }
            }
          }
        }
      }
    }
  } catch (error) {
    console.error(`Error in configurationsSeeder: ${error}`);
    throw error;
  }
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
  configurationsSeeder
});
