'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
const utils = require('../../utils');
class Matcher {
  constructor(_patterns, _settings, _micromatchOptions) {
    this._patterns = _patterns;
    this._settings = _settings;
    this._micromatchOptions = _micromatchOptions;
    this._storage = [];
    this._fillStorage();
  }
  _fillStorage() {
    for (const pattern of this._patterns) {
      const segments = this._getPatternSegments(pattern);
      const sections = this._splitSegmentsIntoSections(segments);
      this._storage.push({
        complete: sections.length <= 1,
        pattern,
        segments,
        sections,
      });
    }
  }
  _getPatternSegments(pattern) {
    const parts = utils.pattern.getPatternParts(
      pattern,
      this._micromatchOptions
    );
    return parts.map((part) => {
      const dynamic = utils.pattern.isDynamicPattern(part, this._settings);
      if (!dynamic) {
        return {
          dynamic: false,
          pattern: part,
        };
      }
      return {
        dynamic: true,
        pattern: part,
        patternRe: utils.pattern.makeRe(part, this._micromatchOptions),
      };
    });
  }
  _splitSegmentsIntoSections(segments) {
    return utils.array.splitWhen(
      segments,
      (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern)
    );
  }
}
exports.default = Matcher;