import dayjs from 'dayjs';
import { type APIRequestContext, expect } from '@playwright/test';
import { type Visit } from '@openmrs/esm-framework';

export const visitStartDatetime = dayjs().subtract(1, 'D');

export const startVisit = async (api: APIRequestContext, patientId: string): Promise<Visit> => {
  const visitRes = await api.post('visit', {
    data: {
      startDatetime: visitStartDatetime.format('YYYY-MM-DDTHH:mm:ss.SSSZZ'),
      patient: patientId,
      location: process.env.E2E_LOGIN_DEFAULT_LOCATION_UUID,
      visitType: '7b0f5697-27e3-40c4-8bae-f4049abfb4ed',
      attributes: [],
    },
  });

  expect(visitRes.ok()).toBeTruthy();
  return await visitRes.json();
};

export const endVisit = async (api: APIRequestContext, visit: Visit) => {
  const visitRes = await api.post(`visit/${visit.uuid}`, {
    data: {
      location: visit.location?.uuid ?? process.env.E2E_LOGIN_DEFAULT_LOCATION_UUID,
      startDatetime: visit.startDatetime ?? visitStartDatetime.format('YYYY-MM-DDTHH:mm:ss.SSSZZ'),
      visitType: visit.visitType?.uuid ?? '7b0f5697-27e3-40c4-8bae-f4049abfb4ed',
      stopDatetime: dayjs().format('YYYY-MM-DDTHH:mm:ss.SSSZZ'),
    },
  });

  return await visitRes.json();
};

export const getVisit = async (api: APIRequestContext, uuid: string): Promise<Visit> => {
  const visitRes = await api.get(`visit/${uuid}?v=full`);
  return await visitRes.json();
};
