const fs = require('fs');
const path = require('path');


// Especifica el nombre del archivo que deseas generar
const nombreArchivo = path.join('C:', 'RpaClaro', 'macrologin.mac');


// Función para verificar y eliminar el archivo
function verificarYEliminarArchivo(nombreArchivo) {
    if (fs.existsSync(nombreArchivo)) {
        try {
            // fs.unlinkSync(nombreArchivo); // Descomentar para eliminar el archivo
            console.log(`Se ha eliminado el archivo '${nombreArchivo}'.`);
        } catch (e) {
            console.log(`Error al eliminar el archivo '${nombreArchivo}': ${e}`);
        }
    } else {
        console.log(`El archivo '${nombreArchivo}' no existe.`);
    }
}

// Función para generar el archivo
function generarArchivo(nombreArchivo, contenido) {
    try {
        // Crea el archivo y escribe el contenido
        fs.writeFileSync(nombreArchivo, contenido, 'utf8');
        console.log(`Se ha generado el archivo '${nombreArchivo}' con éxito.`);
    } catch (e) {
        console.log(`Error al generar el archivo '${nombreArchivo}': ${e}`);
    }
}

function rr(usuario, password) {

    // Ahora, formateamos el texto para insertar el valor de "valor_variable" en el lugar correcto.
    const texto = `<HAScript name="macrologin" description="" timeout="60000" pausetime="300" promptall="true" blockinput="true" author="Usuario" creationdate="19/07/2023 07:57:48 PM" supressclearevents="false" usevars="true" ignorepauseforenhancedtn="true" delayifnotenhancedtn="0" ignorepausetimeforenhancedtn="true" continueontimeout="false">
    <screen name="Pantalla1" entryscreen="true" exitscreen="true" transient="false">
        <description >
            <oia status="NOTINHIBITED" optional="false" invertmatch="false" />
            <numfields number="184" optional="true" invertmatch="false" />
            <numinputfields number="6" optional="true" invertmatch="false" />
        </description>
        <actions>
            <input value="'${usuario}[tab]'" row="0" col="0" movecursor="true" xlatehostkeys="true" encrypted="false" />
            <input value="'${password}'" row="0" col="0" movecursor="true" xlatehostkeys="true" encrypted="false" />
            <input value="'[enter]'" row="0" col="0" movecursor="true" xlatehostkeys="true" encrypted="false" />
            <input value="'[sysreq]'" row="0" col="0" movecursor="true" xlatehostkeys="true" encrypted="false" />
            <input value="'1'" row="0" col="0" movecursor="true" xlatehostkeys="true" encrypted="false" />
            <input value="'[enter]'" row="0" col="0" movecursor="true" xlatehostkeys="true" encrypted="false" />
            <input value="'${usuario}[tab]'" row="0" col="0" movecursor="true" xlatehostkeys="true" encrypted="false" />
            <input value="'${password}'" row="0" col="0" movecursor="true" xlatehostkeys="true" encrypted="false" />
            <input value="'[enter]'" row="0" col="0" movecursor="true" xlatehostkeys="true" encrypted="false" />
            <input value="'[sysreq]'" row="0" col="0" movecursor="true" xlatehostkeys="true" encrypted="false" />
            <input value="'1'" row="0" col="0" movecursor="true" xlatehostkeys="true" encrypted="false" />
            <input value="'[enter]'" row="0" col="0" movecursor="true" xlatehostkeys="true" encrypted="false" />
        </actions>
        <nextscreens timeout="0" >
        </nextscreens>
    </screen>
  </HAScript>`;

    // Llamada para verificar y eliminar el archivo si existe
    verificarYEliminarArchivo(nombreArchivo);

    // Llamada para generar el nuevo archivo
    generarArchivo(nombreArchivo, texto);


    async function runAS400Launcher() {
        const autoit = require("node-autoit-koffi");
        const koffi = require("koffi");
        autoit.lib = koffi.load('C:/RpaClaro/AutoItX3_x64.dll');
        await autoit.run('C:/Users/Public/IBM/ClientSolutions/Start_Programs/Windows_i386-32/acslaunch_win-32.exe C:/RpaClaro/AS400.hod');
        try {
            const result = await autoit.winWait("Iniciar sesión en IBM i", "", 35);

            if (result) {
                let ventana_error = 0;
                let ventana_contrasena = 0;
                let ventana_mensaje1 = 0;
                let ventana_mensaje2 = 0;
                console.log("El programa se ha abierto correctamente.");
                await autoit.winActivate("Iniciar sesión en IBM i");
                await autoit.winSetState("A - ", '', 3)
                await autoit.controlSend("Iniciar sesión en IBM i", '', null, usuario);
                await autoit.winActivate("Iniciar sesión en IBM i");
                await autoit.controlSend("Iniciar sesión en IBM i", '', null, "{TAB}");
                await autoit.winActivate("Iniciar sesión en IBM i");
                await autoit.controlSend("Iniciar sesión en IBM i", '', null, password);
                await autoit.controlSend("Iniciar sesión en IBM i", '', null, "{ENTER}");
                ventana_error = await autoit.winWait("Mensaje de error", "", 8);
                if (ventana_error == 1) {
                    console.log("Aparecio mensaje de error");
                } else {
                    console.log("No aparecio mensaje de error");
                }

                ventana_contrasena = await autoit.winWait("Cambiar contraseña de IBM i", "", 1);
                if (ventana_contrasena == 1) {
                    console.log("Aparecio mensaje de contrasena");
                } else {
                    console.log("No aparecio mensaje de contrasena");
                }

                ventana_mensaje1 = await autoit.winWait("Mensaje de consulta", "", 1);
                if (ventana_mensaje1 == 1) {
                    await autoit.controlSend("Mensaje de consulta", '', null, "{ENTER}");
                    console.log("Aparecio mensaje 1");
                } else {
                    console.log("No aparecio mensaje 1");
                }

                ventana_mensaje2 = await autoit.winWait("Mensaje de consulta", "", 1);
                if (ventana_mensaje2 == 1) {
                    await autoit.controlSend("Mensaje de consulta", '', null, "{ENTER}");
                    console.log("Aparecio mensaje 2");
                } else {
                    console.log("No aparecio mensaje 2");
                }

                console.log(ventana_contrasena);
                console.log(ventana_error);

                if (ventana_contrasena == 0 && ventana_error == 0) {
                    console.log('diferentes');
                    await new Promise((resolve) => setTimeout(resolve, 3000));
                    let segundo_login = await autoit.winGetText('A - ');
                    console.log(segundo_login);
                    if (segundo_login == 128) {
                        console.log('Se encontro segundo login');
                        await autoit.winActivate("A - ");
                        await new Promise((resolve) => setTimeout(resolve, 2000));
                        try {
                            await autoit.controlSend("A - ", '', null, "+^w");
                            console.log('Se ejecuto hotkey');
                            await autoit.controlSend("A - ", '', null, usuario);
                            await autoit.winActivate("A - ");
                            await autoit.controlSend("A - ", '', null, "{TAB}");
                            await autoit.winActivate("A - ");
                            await autoit.controlSend("A - ", '', null, password);
                            await autoit.controlSend("A - ", '', null, "{ENTER}");
                        } catch (error) {
                            console.log('No se ejecuto hotkey: ' + error);
                        }
                    } else {
                        console.log('No se encontro segundo login');
                    }

                }
            } else {
                console.log("El programa no se ha abierto dentro del tiempo de espera.");
            }

        } catch (error) {
            console.error("Error:", error);
        }
    }

    runAS400Launcher();

    return 'test';
}

module.exports = { rr };
