import { type PlaywrightTestArgs } from '@playwright/test';

import { type PluginFixture } from '@grafana/plugin-e2e';

import { datasetResponse, fieldsResponse, tablesResponse } from './mocks/mysql.mocks';

export async function mockDataSourceRequest({ context, explorePage, selectors }: PlaywrightTestArgs & PluginFixture) {
  await explorePage.datasource.set('gdev-mysql');
  await context.route(selectors.apis.DataSource.queryPattern, async (route, request) => {
    const refId = request.postDataJSON().queries[0].refId;
    if (/fields-.*/g.test(refId)) {
      return route.fulfill({ json: fieldsResponse(refId), status: 200 });
    }
    switch (refId) {
      case 'tables':
        return route.fulfill({ json: tablesResponse, status: 200 });
      case 'datasets':
        return route.fulfill({ json: datasetResponse, status: 200 });
      default:
        return route.continue();
    }
  });
}
