import './index';
import { ParamSet, fromParamSet } from 'common-sk/modules/query';
import { SearchControlsSk, SearchCriteria } from './search-controls-sk';
import { $$ } from 'common-sk/modules/dom';

const corpora = ['canvaskit', 'colorImage', 'gm', 'image', 'pathkit', 'skp', 'svg'];

const paramSet: ParamSet = {
  'car make': ['chevrolet', 'dodge', 'ford', 'lincoln motor company'],
  'color': ['blue', 'green', 'red'],
  'used': ['yes', 'no'],
  'year': ['2020', '2019', '2018', '2017', '2016', '2015']
};

let currentValue: SearchCriteria = {
  corpus: 'gm',
  leftHandTraceFilter: {
    'car make': ['chevrolet', 'dodge', 'ford'],
    'color': ['blue'],
    'year': ['2020', '2019']
  },
  rightHandTraceFilter: {'color': ['blue'], 'used': ['yes']},
  includePositiveDigests: true,
  includeNegativeDigests: true,
  includeUntriagedDigests: true,
  includeDigestsNotAtHead: false,
  includeIgnoredDigests: false,
  minRGBADelta: 100,
  maxRGBADelta: 200,
  mustHaveReferenceImage: true,
  sortOrder: 'descending'
};
updateSearchCriteriaPreview();

const searchControlsSk = new SearchControlsSk();
searchControlsSk.paramSet = paramSet;
searchControlsSk.corpora = corpora;
searchControlsSk.searchCriteria = currentValue;
searchControlsSk.addEventListener('search-controls-sk-change', (e: Event) => {
  currentValue = (e as CustomEvent<SearchCriteria>).detail;
  updateSearchCriteriaPreview();
});
$$('.container')!.appendChild(searchControlsSk);

$$<HTMLButtonElement>('#clear')!.addEventListener('click', () => {
  searchControlsSk.searchCriteria = {
    corpus: 'canvaskit',
    leftHandTraceFilter: {},
    rightHandTraceFilter: {},
    includePositiveDigests: false,
    includeNegativeDigests: false,
    includeUntriagedDigests: false,
    includeDigestsNotAtHead: false,
    includeIgnoredDigests: false,
    minRGBADelta: 0,
    maxRGBADelta: 0,
    mustHaveReferenceImage: false,
    sortOrder: 'ascending'
  };
  currentValue = searchControlsSk.searchCriteria;
  updateSearchCriteriaPreview();
});

// Updates the "Search criteria" section of the demo page.
function updateSearchCriteriaPreview() {
  const set =
    (selector: string, text: string | number | boolean) =>
      $$<HTMLSpanElement>('.preview ' + selector)!.innerText = text.toString();

  set('.corpus', currentValue.corpus);
  set('.left-hand-trace-filter', fromParamSet(currentValue.leftHandTraceFilter));
  set('.right-hand-trace-filter', fromParamSet(currentValue.rightHandTraceFilter));
  set('.include-positive-digests', currentValue.includePositiveDigests);
  set('.include-negative-digests', currentValue.includeNegativeDigests);
  set('.include-untriaged-digests', currentValue.includeUntriagedDigests);
  set('.include-digests-not-at-head', currentValue.includeDigestsNotAtHead);
  set('.include-ignored-digests', currentValue.includeIgnoredDigests);
  set('.min-rgba-delta', currentValue.minRGBADelta);
  set('.max-rgba-delta', currentValue.maxRGBADelta);
  set('.sort-order', currentValue.sortOrder);
  set('.must-have-reference-image', currentValue.mustHaveReferenceImage);
}
