function toBackendDate(date = new Date()) {
  const pad = (value: number | string) => String(value).padStart(2, "0");

  return [
    date.getFullYear(),
    pad(date.getMonth() + 1),
    pad(date.getDate()),
  ].join("-") +
    " " +
    [pad(date.getHours()), pad(date.getMinutes()), pad(date.getSeconds())].join(":");
}

function toBackendTestValue(result: any) {
  if (!result || result.status === "unsupported" || result.status === "skipped") {
    return "";
  }

  return result.status === "pass" ? 1 : 0;
}

const diagnosticTestMap = {
  touchZone: { group: "TouchScreen", item: "TouchScreen" },
  multiTouch: { group: "MultiTouch", item: "MultiTouch" },
  audio: { group: "Microphone", item: "Microphone" },
  orientation: { group: "Orientation", item: "Orientation" },
  flashlight: { group: "Flashlight", item: "Flashlight" },
  pixelDrop: { group: "LCD", item: "LCD" },
  cameras: { group: "Camera", item: "Camera" },
  battery: { group: "Battery", item: "Battery" },
  refreshRate: { group: "RefreshRate", item: "RefreshRate" },
  imei: { group: "IMEI", item: "IMEI" },
};

function buildDiagnosticTests(results: Record<string, any>) {
  return Object.entries(diagnosticTestMap).reduce(
    (tests, [labId, config]) => {
      const result = results[labId];
      const value = toBackendTestValue(result);

      return {
        ...tests,
        [config.group]: {
          [config.item]: [
            {
              Item: config.item,
              Value: value,
              Payload: {
                Validation: "Auto",
                Status: result?.status || "skipped",
                ...(result?.reason ? { Reason: result.reason } : {}),
                ...(result?.notes ? { Notes: result.notes } : {}),
              },
            },
          ],
        },
      };
    },
    {} as Record<string, unknown>,
  );
}

function getManufacturer(model?: string, osVersion?: string) {
  const modelText = model?.toLowerCase() || "";
  const osText = osVersion?.toLowerCase() || "";

  if (
    modelText.includes("iphone") ||
    modelText.includes("ipad") ||
    osText.includes("ios") ||
    osText.includes("ipados")
  ) {
    return "APPLE";
  }

  return "";
}

export function buildBackendPayload(
  results: Record<string, any>,
  imeiFromUrl = "",
  partnerName = "",
) {
  const now = toBackendDate();
  const deviceInfo = results.deviceContext?.data || {};
  const imei = imeiFromUrl || results.imei?.imei || "";
  const battery = results.battery?.data || null;
  const model = deviceInfo.modelLabel || "";
  const osVersion = deviceInfo.os || "";

  return {
    data: {
      imei,
      partner_name: partnerName.toLowerCase().trim(),
      result: {
        Grade: "",
        CosmeticGrade: "",
        LastConnectDateTime: now,
        ConnectionStart: now,
        Esn: "",
        EsnAdvanced: "",
        LockStatus: "",
        UserLogin: "Administrator",
        ErasedAt: "",
        Note: "",
        DiagnosticTestsDateTime: now,
        DevState: "Browser",
        Supplier: "",
        InvoiceNumber: "",
        TestingTime: "",
        NetworkTechnology: "",
        ConnectionEnd: now,
        Battery:
          typeof battery?.level === "number" ? Math.round(battery.level * 100) : "",
        AuthLogin: "",
        CustomNote: "",
        CustomDate: "",
        CustomNum: "",
        CustomColor: "",
        ConnectionID:
          typeof crypto !== "undefined" && crypto.randomUUID
            ? crypto.randomUUID()
            : "",
        DeviceID: imei,
        ECID: "",
        Manufacturer: getManufacturer(model, osVersion),
        Model: model ? model.toUpperCase() : "",
        ModelNumber: "",
        AModelNumber: "",
        IMEI: imei,
        IMEI2: "",
        SerialNumber: "",
        Memory: deviceInfo.memory || "",
        HardwareModel: "",
        OSVersion: osVersion,
        OSInfoExt: "",
        CPU: deviceInfo.cores ? `${deviceInfo.cores} cores` : "",
        Firmware: "",
        RegionInfo: "",
        RegionISO3: "",
        ProductType: "",
        Color: "",
        VendorState: "",
        Carrier: "",
        KNOX: "0",
        MDM: "",
        RAM: deviceInfo.memory || "",
        SKU: "",
        EAN: "",
        DeviceHack: "0",
        ROM: "",
        "FMIP/FRP": "0",
        DiagnosticTests: buildDiagnosticTests(results),
        RequestDateTime: now,
        TagsForDevices: [],
        Autograding: "",
      },
    },
  };
}
