I have the following code:

// Polyfill for String.trim() in ExtendScript
if (typeof String.prototype.trim !== 'function') {
    String.prototype.trim = function() {
        return this.replace(/^\s+|\s+$/g, '');
    };
}

// ExtendScript for After Effects

// Begin undo group for script actions
app.beginUndoGroup("Create SubRip Comps");

// ... rest of your script ...

// Prompt user to select a SubRip (.srt) file
var srtFile = File.openDialog("Select a SubRip (.srt) file");
if (srtFile != null) {
    srtFile.open("r");
    var srtContent = srtFile.read();
    srtFile.close();

    // Parse the SubRip file content
    var entries = parseSRT(srtContent);

    if (entries.length > 0) {
        // Create a main composition to hold all subtitle comps
        var mainCompName = "Subtitles_Comp";
        var mainCompDuration = entries[entries.length - 1].endTime;
        var mainCompWidth = 1920;
        var mainCompHeight = 1080;
        var mainCompPixelAspect = 1.0;
        var mainCompFrameRate = 30; // Adjust as needed

        var mainComp = app.project.items.addComp(
            mainCompName,
            mainCompWidth,
            mainCompHeight,
            mainCompPixelAspect,
            mainCompDuration,
            mainCompFrameRate
        );

        // Locate the existing "WHITEBACKGROUND" shape layer in the project
        var whiteBG = findFootageByName("WHITEBACKGROUND");
        if (whiteBG == null) {
            alert('The "WHITEBACKGROUND" layer was not found in the project.');
        }

        // Process each subtitle entry
        for (var i = 0; i < entries.length; i++) {
            var entry = entries[i];

            // Remove "{txt}" from the text for naming
            var cleanText = entry.text.replace("{txt}", "").trim();

            // Create a new composition for each subtitle
            var subtitleComp = app.project.items.addComp(
                cleanText,
                mainCompWidth,
                mainCompHeight,
                mainCompPixelAspect,
                entry.duration,
                mainCompFrameRate
            );

            // Add the text layer
            var textLayer = subtitleComp.layers.addText(cleanText);
            var textProp = textLayer.property("Source Text");
            var textDocument = textProp.value;

            // Check for "{txt}" to set specific text properties
            if (entry.text.indexOf("{txt}") !== -1) {
                textDocument.font = "MxPlus IBM XGA-AI 12x20"; // Ensure this font is installed
                textDocument.fontSize = 45;
                textDocument.leading = 54;
                textDocument.fillColor = hexToRgb("#24254D");
                textDocument.tracking = 0;
                textDocument.justification = ParagraphJustification.LEFT_JUSTIFY;
            }

            textProp.setValue(textDocument);
            textLayer.property("Position").setValue([623, 706]);

            // Add the "WHITEBACKGROUND" layer beneath the text layer
            if (whiteBG != null) {
                var bgLayer = subtitleComp.layers.add(whiteBG);
                bgLayer.moveBefore(textLayer);
            }

            // Place the subtitle comp into the main comp at the correct time
            var compLayer = mainComp.layers.add(subtitleComp);
            compLayer.startTime = entry.startTime;
            compLayer.inPoint = 0;
            compLayer.outPoint = entry.duration;
        }
    } else {
        alert("No valid entries found in the SubRip file.");
    }
}

// End undo group
app.endUndoGroup();

// Function to parse SRT content into entries
function parseSRT(data) {
    var regex = /(\d+)\s+([\d:,]+)\s+-->\s+([\d:,]+)\s+([\s\S]*?)(?=\n{2,}|$)/g;
    var entries = [];
    var match;

    while ((match = regex.exec(data)) !== null) {
        var index = parseInt(match[1], 10);
        var startTime = timeToSeconds(match[2]);
        var endTime = timeToSeconds(match[3]);
        var text = match[4].replace(/\r\n|\r|\n/g, "\n").trim();

        entries.push({
            index: index,
            startTime: startTime,
            endTime: endTime,
            duration: endTime - startTime,
            text: text
        });
    }

    return entries;
}

// Convert time in "HH:MM:SS,ms" to seconds
function timeToSeconds(t) {
    var parts = t.split(',');
    var timeParts = parts[0].split(':');
    var hours = parseFloat(timeParts[0]);
    var minutes = parseFloat(timeParts[1]);
    var seconds = parseFloat(timeParts[2]);
    var milliseconds = parseFloat(parts[1]) / 1000;

    return hours * 3600 + minutes * 60 + seconds + milliseconds;
}

// Convert hex color to RGB array (values between 0 and 1)
function hexToRgb(hex) {
    var bigint = parseInt(hex.replace("#", ""), 16);
    var r = ((bigint >> 16) & 255) / 255;
    var g = ((bigint >> 8) & 255) / 255;
    var b = (bigint & 255) / 255;
    return [r, g, b];
}

// Find a footage item by name in the project panel
function findFootageByName(name) {
    for (var i = 1; i <= app.project.numItems; i++) {
        if (app.project.item(i) instanceof FootageItem && app.project.item(i).name === name) {
            return app.project.item(i);
        }
    }
    return null;
}


it works, but I have 3 problems:

1. The text doesn't seem to correctly select "MxPlus IBM XGA-AI 12x20", it seems to go to a default serif font when After is unable to find the font, the system name of the font is "MxPlus_IBM_XGA-AI_12x20", try and fix this
2. After Effects creates a comp but it doesn't automatically place it on the timeline following the srt time (the in and out)
3. instead of looking for a solid named "WHITEBACKGROUND" in the projects, it should find a precomp named "WHITEBACKGROUND"