include(Resources.id("jsblock:scripts/pids_util.js")); // Built-in script shipped with JCM
const HEADER_HEIGHT = 13;

function create(ctx, state, pids) {
}

function render(ctx, state, pids) {

    Texture.create("Background")
        .texture("jsblock:textures/block/pids/pids_nsewl_bg.png")
        .size(pids.width, pids.height)
        .draw(ctx);

    // Top Bar
    let arrivalsWrapper = pids.arrivals();
    let hasPlatform = arrivalsWrapper != null && arrivalsWrapper.platforms().size() > 0;

    // Clock
    Text.create("Clock")
        .text(PIDSUtil.formatTime(MinecraftClient.worldDayTime(), true))
        .color(0xFFFFFF)
        .pos(5, 2)
        .scale(0.9)
        .draw(ctx);

    // Station name
    if (hasPlatform) {

        Text.create("StationName")
            .text(pids.station().getName())
            .color(0xFFFF00)
            .pos(pids.width - 5, 2)
            .scale(0.9)
            .rightAlign()
            .draw(ctx);

    } else {

        Text.create("PlatformClosed")
            .text("Platform Closed")
            .color(0xFFFF00)
            .pos(pids.width - 5, 2)
            .scale(0.9)
            .rightAlign()
            .draw(ctx);

        return;
    }

    // Arrivals
    if (!hasPlatform) return;

    // First arrival countdown
    let firstArrival = arrivalsWrapper.get(0);

    let firstArrivalSeconds = 999;

    if (firstArrival != null) {
        firstArrivalSeconds = Math.floor(
            (firstArrival.arrivalTime() - Date.now()) / 1000
        );
    }

    let START_ROW = 1;
    let MAX_ROWS = pids.rows - 1;

    for (let i = 0; i < MAX_ROWS; i++) {

        let rowY = HEADER_HEIGHT + ((i + START_ROW) * 16.75);

        let customMsg = pids.getCustomMessage(i);
        let arrival = arrivalsWrapper.get(i);

        if ((arrival == null || pids.isRowHidden(i)) && customMsg === "") continue;

        if (customMsg != "") {

            Text.create(TextUtil.cycleString("Custom Text"))
                .text(customMsg)
                .size(pids.width - 10, 9)
                .scaleXY()
                .pos(20, rowY)
                .scale(i === 0 ? 1.25 : 1.1)
                .color(i === 0 ? 0xFFFF00 : 0xFFFFFF)
                .draw(ctx);

        } else {

            let destX = 20;

            if (!pids.isPlatformNumberHidden()) {

                // Route-coloured fill
                Texture.create("Platform Circle Fill")
                    .texture("jsblock:textures/block/pids/nsewl_misc/mrt_circle.png")
                    .pos(5, rowY - 1)
                    .size(10.5, 10.5)
                    .color(arrival.routeColor())
                    .draw(ctx);

                // White outline
                Texture.create("Platform Circle Outline")
                    .texture("jsblock:textures/block/pids/nsewl_misc/mrt_circle_outline.png")
                    .pos(5, rowY - 1)
                    .size(10.5, 10.5)
                    .draw(ctx);

                Text.create("Platform Circle Text")
                    .text(arrival.platformName())
                    .pos(10, rowY + 1)
                    .size(9, 9)
                    .scaleXY()
                    .scale(0.9)
                    .centerAlign()
                    .color(0xFFFFFF)
                    .draw(ctx);
            }

            // Flash first destination when ETA <= 10 sec
let destinationColor =
    (i === 0)
        ? (
            firstArrivalSeconds <= 10
                ? (
                    Math.floor(Date.now() / 500) % 2 === 0
                        ? 0xFFFF00
                        : 0xFFFFFF
                )
                : 0xFFFFFF
          )
        : 0xFFFFFF;

Text.create("Arrival Destination")
    .text(TextUtil.cycleString(arrival.destination()))
    .pos(destX, rowY)
    .size(i === 0 ? 60 : 50, i === 0 ? 9 : 8)
    .scaleXY()
    .scale(i === 0 ? 1.25 : 1.1)
    .color(destinationColor)
    .draw(ctx);

            Text.create("Arrival Destination")
                .text(TextUtil.cycleString(arrival.destination()))
                .pos(destX, rowY)
                .size(i === 0 ? 60 : 50, i === 0 ? 9 : 8)
                .scaleXY()
                .scale(i === 0 ? 1.25 : 1.1)
                .color(destinationColor)
                .draw(ctx);

            Text.create("ETA Text")
                .text(TextUtil.getNonCjkParts(PIDSUtil.getETAText(arrival.arrivalTime())))
                .scale(1.25)
                .size(25, 8)
                .scaleXY()
                .rightAlign()
                .pos(pids.width - 8, rowY)
                .color(0xFFFFFF)
                .draw(ctx);
        }
    }
}

function dispose(ctx, state, pids) {
}