import sys
from playwright.sync_api import sync_playwright
pins = {}
for l in open('/tmp/out/app/storage/pins.txt'):
    a, b = l.strip().split('\tPIN: '); pins[a] = b
B = 'http://127.0.0.1:8099/'
res = []
def ok(n, c, extra=''):
    res.append(bool(c)); print(('PASS ' if c else 'FAIL ') + n + ('' if c else ' :: ' + str(extra)))
S = '/tmp/out/app/storage/'
with sync_playwright() as p:
    br = p.chromium.launch(); ctx = br.new_context(viewport={'width': 390, 'height': 800}, device_scale_factor=2); pg = ctx.new_page()
    errs = []; pg.on('pageerror', lambda e: errs.append(str(e))); pg.on('dialog', lambda d: d.accept('tes alasan'))
    pg.goto(B); pg.wait_for_selector('#login')
    pg.screenshot(path=S + 's_login.png')
    pg.fill('#nik', 'pic01'); pg.fill('#pin', '000000'); pg.click('#btnLogin'); pg.wait_for_timeout(600)
    ok('login salah menampilkan error', 'salah' in pg.inner_text('#errLogin').lower(), pg.inner_text('#errLogin'))
    pg.fill('#nik', 'pic01'); pg.fill('#pin', pins['pic01']); pg.click('#btnLogin'); pg.wait_for_selector('#btnTerima')
    ok('antrean tampil 3 baris', pg.locator('.ant').count() == 3, pg.locator('.ant').count())
    ok('tombol terima total 3.750.000', '3.750.000' in pg.inner_text('#btnTerima'), pg.inner_text('#btnTerima'))
    pg.locator('.ant input[inputmode=numeric]').first.fill('700000')
    ok('selisih tampil & tombol nonaktif tanpa catatan', pg.locator('#btnTerima').is_disabled() and 'Kurang' in pg.locator('.sel').first.inner_text())
    pg.locator('.ant input[placeholder^="Catatan"]').first.fill('uang kurang 10rb')
    ok('tombol aktif setelah catatan', pg.locator('#btnTerima').is_enabled())
    pg.screenshot(path=S + 's_antrean.png', full_page=True)
    pg.click('#btnTerima'); pg.wait_for_selector('text=Tidak ada setoran menunggu')
    ok('antrean kosong setelah diterima', True)
    pg.click('#tabsIn button[data-k=brangkas]'); pg.wait_for_selector('text=Brangkas terkunci')
    ok('tab brangkas minta PIN', True)
    pg.screenshot(path=S + 's_kunci.png')
    pg.fill('#view input.pin', '000000'); pg.click('button:has-text("Buka")'); pg.wait_for_selector('.err:has-text("PIN salah")')
    ok('PIN salah ditolak di UI', True)
    pg.fill('#view input.pin', pins['pic01']); pg.click('button:has-text("Buka")'); pg.wait_for_selector('.saldo .v')
    ok('saldo tersembunyi default', '3.700.000' not in pg.inner_text('#view') and '••' in pg.inner_text('.saldo .v'), pg.inner_text('.saldo .v'))
    pg.click('.saldo >> text=Tampilkan')
    ok('saldo brangkas = 3.700.000', '3.700.000' in pg.inner_text('.saldo .v'), pg.inner_text('.saldo .v'))
    pg.screenshot(path=S + 's_brangkas.png', full_page=True)
    pg.click('#tabsIn button[data-k=bayar]'); pg.wait_for_selector('select')
    pg.select_option('select', label='PAK HASAN'); pg.wait_for_selector('.nota-item')
    ok('2 nota PAK HASAN', pg.locator('.nota-item').count() == 2)
    pg.click('text=Pilih semua')
    ok('tombol bayar 3.250.000', '3.250.000' in pg.locator('button.btn', has_text='Bayar').last.inner_text(), pg.locator('button.btn').last.inner_text())
    pg.screenshot(path=S + 's_bayar.png', full_page=True)
    pg.locator('button.btn', has_text='Bayar 2 nota').click(); pg.wait_for_selector('textarea')
    slip = pg.input_value('textarea'); print(slip.replace('\n', ' | '))
    ok('slip benar', slip.startswith('NOTA PAK HASAN') and 'Total Rp 3.250.000' in slip)
    pg.click('text=Selesai'); pg.wait_for_timeout(600)
    pg.click('#tabsIn button[data-k=brangkas]'); pg.wait_for_selector('text=Brangkas terkunci')
    ok('pindah tab mengunci brangkas lagi', True)
    pg.fill('#view input.pin', pins['pic01']); pg.click('button:has-text("Buka")'); pg.wait_for_selector('.saldo .v'); pg.click('.saldo >> text=Tampilkan')
    ok('saldo 450.000 setelah bayar', '450.000' in pg.inner_text('.saldo .v'), pg.inner_text('.saldo .v'))
    pg.click('#btnOut'); pg.wait_for_selector('#login:not(.hide)')
    pg.fill('#nik', 'gdg01'); pg.fill('#pin', pins['gdg01']); pg.click('#btnLogin'); pg.wait_for_selector('text=Input nota supplier')
    ok('gudang tanpa tab bar', pg.locator('#tabs.hide').count() == 1)
    pg.select_option('select', label='PUTRI SALSA'); pg.fill('#view input[inputmode=numeric]', '1500000'); pg.click('text=Simpan nota')
    pg.wait_for_selector('.toast'); ok('nota tersimpan', 'tersimpan' in pg.inner_text('.toast'), pg.inner_text('.toast'))
    pg.screenshot(path=S + 's_gudang.png')
    pg.fill('#view input[inputmode=numeric]', '1500000'); pg.click('text=Simpan nota'); pg.wait_for_timeout(900)
    ok('duplikat: konfirmasi diterima lalu tersimpan', 'tersimpan' in pg.inner_text('.toast'), pg.inner_text('.toast'))
    ok('tanpa error JS', not errs, errs)
    br.close()
print('== PASS %d / FAIL %d ==' % (sum(res), len(res) - sum(res)))
