// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import '../../ui/kit/kit.js';

import * as Common from '../../core/common/common.js';
import * as Host from '../../core/host/host.js';
import type * as Workspace from '../../models/workspace/workspace.js';
import {PanelUtils} from '../../panels/utils/utils.js';
import {Directives, html, type TemplateResult} from '../../ui/lit/lit.js';

import {FilteredUISourceCodeListProvider} from './FilteredUISourceCodeListProvider.js';
import {SourcesView} from './SourcesView.js';

const {styleMap} = Directives;

export class OpenFileQuickOpen extends FilteredUISourceCodeListProvider {
  override attach(): void {
    this.setDefaultScores(SourcesView.defaultUISourceCodeScores());
    super.attach();
  }

  override uiSourceCodeSelected(
      uiSourceCode: Workspace.UISourceCode.UISourceCode|null, lineNumber?: number, columnNumber?: number): void {
    Host.userMetrics.actionTaken(Host.UserMetrics.Action.SelectFileFromFilePicker);

    if (!uiSourceCode) {
      return;
    }
    if (typeof lineNumber === 'number') {
      void Common.Revealer.reveal(uiSourceCode.uiLocation(lineNumber, columnNumber));
    } else {
      void Common.Revealer.reveal(uiSourceCode);
    }
  }

  override filterProject(project: Workspace.Workspace.Project): boolean {
    return !project.isServiceProject();
  }

  override renderItem(itemIndex: number, query: string): TemplateResult {
    const {iconName, color} = PanelUtils.iconDataForResourceType(this.itemContentTypeAt(itemIndex));
    // clang-format off
    return html`
      <devtools-icon class="large" name=${iconName} style=${styleMap({color})}></devtools-icon>
      ${super.renderItem(itemIndex, query)}`;
    // clang-format on
  }
}
