/**
 * Edge-case browser QA for Layer 10 returns.
 *   1. Order delivered >14d ago — Request return button must be hidden.
 *   2. Order with an existing open return — Request return button must be
 *      hidden, state strip visible instead.
 */

import { test, expect, Page } from '@playwright/test';
import { readFileSync } from 'node:fs';

const fixture = JSON.parse(readFileSync('/tmp/qa-fixture.json', 'utf8')) as {
  buyer_token: string;
};
const edges = JSON.parse(readFileSync('/tmp/qa-edge-cases.json', 'utf8')) as {
  expired_purchase_id: string;
  dup_purchase_id: string;
  closed_purchase_id: string;
};

const WEB = process.env.QA_WEB ?? 'http://localhost:3000';

async function authAs(page: Page, token: string) {
  await page.addInitScript((t) => {
    try {
      window.localStorage.setItem('auth_token', t);
    } catch {}
  }, token);
}

test.describe('Layer 10 returns — edge cases', () => {
  test('Request return button hidden when order delivered > 14d ago', async ({ page }) => {
    await authAs(page, fixture.buyer_token);
    await page.goto(`${WEB}/purchases/${edges.expired_purchase_id}`, {
      waitUntil: 'networkidle',
    });

    await expect(page.getByText('QA Expired Tee')).toBeVisible({ timeout: 10_000 });
    await expect(page.getByRole('button', { name: /Request return/i })).toHaveCount(0);

    await page.screenshot({ path: '/tmp/qa-edge-1-expired.png', fullPage: true });
  });

  test('Request return button hidden + state strip shown when an open return exists', async ({ page }) => {
    await authAs(page, fixture.buyer_token);
    await page.goto(`${WEB}/purchases/${edges.dup_purchase_id}`, {
      waitUntil: 'networkidle',
    });

    await expect(page.getByText('QA Dup Tee')).toBeVisible({ timeout: 10_000 });
    await expect(page.getByRole('button', { name: /Request return/i })).toHaveCount(0);
    await expect(page.getByTestId('return-state-badge')).toHaveAttribute(
      'data-state',
      'requested',
    );

    await page.screenshot({ path: '/tmp/qa-edge-2-existing.png', fullPage: true });
  });

  test('Request return button hidden + Closed strip shown after a refunded return', async ({ page }) => {
    await authAs(page, fixture.buyer_token);
    await page.goto(`${WEB}/purchases/${edges.closed_purchase_id}`, {
      waitUntil: 'networkidle',
    });

    await expect(page.getByText('QA Closed Tee')).toBeVisible({ timeout: 10_000 });
    await expect(page.getByRole('button', { name: /Request return/i })).toHaveCount(0);
    await expect(page.getByTestId('return-state-badge')).toHaveAttribute(
      'data-state',
      'closed',
    );

    await page.screenshot({ path: '/tmp/qa-edge-3-closed.png', fullPage: true });
  });
});
