# Copyright (c) 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os

from perf_insights import corpus_driver
from perf_insights import local_file_trace_handle
from perf_insights.value import run_info as run_info_module


def _GetFilesIn(basedir):
  data_files = []
  for dirpath, dirnames, filenames in os.walk(basedir, followlinks=True):
    new_dirnames = [d for d in dirnames if not d.startswith('.')]
    del dirnames[:]
    dirnames += new_dirnames
    for f in filenames:
      if f.startswith('.'):
        continue
      if f == 'README.md':
        continue
      full_f = os.path.join(dirpath, f)
      rel_f = os.path.relpath(full_f, basedir)
      data_files.append(rel_f)

  data_files.sort()
  return data_files

def _GetTagsForRelPath(relpath):
  # Tags.
  sub_dir = os.path.dirname(relpath)
  if len(sub_dir) == 0:
    return []
  parts = sub_dir.split(os.sep)
  return [p for p in parts if len(p) > 0]

def _GetMetadataForFilename(base_directory, filename):
  relpath = os.path.relpath(filename, base_directory)
  tags = _GetTagsForRelPath(relpath)

  metadata = {'tags': tags}

  # TODO(nduca): Add modification time to metadata.
  return metadata


class LocalDirectoryCorpusDriver(corpus_driver.CorpusDriver):
  def __init__(self, directory):
    self.directory = directory

  def GetTraceHandlesMatchingQuery(self, query):
    trace_handles = []

    files = _GetFilesIn(self.directory)
    for rel_filename in files:
      filename = os.path.join(self.directory, rel_filename)
      metadata = _GetMetadataForFilename(self.directory, filename)

      if not query.Eval(metadata):
        continue

      run_info = run_info_module.RunInfo(
          url="file://%s" % filename,
          display_name=rel_filename,
          metadata=metadata)

      th = local_file_trace_handle.LocalFileTraceHandle(run_info, filename)
      trace_handles.append(th)

    return trace_handles

