import assert from 'node:assert/strict';
import test from 'node:test';

import {
    formatLocalDateTime,
    formatLocalTimeSeconds,
    formatSeoulDateTime,
    formatSeoulHourMinute,
    formatSeoulTimeSeconds,
} from '../src/utils/legacyDateTime.ts';

void test('formats API UTC timestamps in the server Seoul timezone', () => {
    assert.equal(formatSeoulDateTime('2026-08-13T00:07:06.713Z'), '2026-08-13 09:07:06');
    assert.equal(formatSeoulHourMinute('2026-08-13T00:07:06.713Z'), '09:07');
    assert.equal(formatSeoulTimeSeconds('2026-08-13T00:07:06.713Z'), '09:07:06');
});

void test('keeps legacy timezone-less server timestamps unchanged', () => {
    assert.equal(formatSeoulDateTime('2026-08-13 09:07:06'), '2026-08-13 09:07:06');
    assert.equal(formatSeoulHourMinute('2026-08-13 09:07:06'), '09:07');
    assert.equal(formatSeoulTimeSeconds('2026-08-13 09:07:06'), '09:07:06');
});

void test('formats an ISO instant with the client local clock', () => {
    const instant = new Date('2026-08-13T00:07:06.713Z');
    const expected = [instant.getHours(), instant.getMinutes(), instant.getSeconds()]
        .map((part) => String(part).padStart(2, '0'))
        .join(':');
    assert.equal(formatLocalTimeSeconds(instant), expected);
    assert.equal(formatLocalTimeSeconds(instant.toISOString()), expected);
    assert.equal(formatLocalTimeSeconds('invalid'), '-');
});

void test('formats an autorun expiry instant with the client local date and seconds', () => {
    const instant = new Date('2026-08-13T00:07:06.713Z');
    const expectedDate = [instant.getFullYear(), instant.getMonth() + 1, instant.getDate()]
        .map((part, index) => String(part).padStart(index === 0 ? 4 : 2, '0'))
        .join('-');
    assert.equal(formatLocalDateTime(instant), `${expectedDate} ${formatLocalTimeSeconds(instant)}`);
    assert.equal(formatLocalDateTime('invalid'), '-');
});
