get_initial_state());
  }
  public function enqueue_production_scripts()
  {
    $entry_key = 'src/main.ts';
    $assets_base_path = get_template_directory_uri() . '/assets/main/';
    $manifest = $this->get_manifest_file('main');
    // 
    wp_enqueue_script('[type:module]chunk-entrance.js', $assets_base_path . $manifest[$entry_key]['file'], array(), null, false);
    wp_localize_script('[type:module]chunk-entrance.js', 'InitState', (new InitStateController())->get_initial_state());
    // 
    foreach ($manifest[$entry_key]['imports'] as $index => $import) {
      wp_enqueue_style("[ref:modulepreload]chunk-vendors{$import}", $assets_base_path . $manifest[$import]['file']);
      if (empty($manifest[$import]['css'])) {
        continue;
      }
      foreach ($manifest[$import]['css'] as $css_index => $css_path) {
        wp_enqueue_style("sakura-chunk-{$import}-{$css_index}.css", $assets_base_path . $css_path);
      }
    }
    // 
    foreach ($manifest[$entry_key]['css'] as $index => $path) {
      wp_enqueue_style("sakura-chunk-{$index}.css", $assets_base_path . $path);
    }
  }
  public function enqueue_common_scripts()
  {
    wp_enqueue_style('style.css', get_template_directory_uri() . '/style.css');
    wp_enqueue_style('fontawesome-free.css', 'https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.15.3/css/all.min.css');
    wp_enqueue_style('normalize.css', 'https://cdn.jsdelivr.net/npm/normalize.css/normalize.css');
    wp_enqueue_script('recaptcha', 'https://www.recaptcha.net/recaptcha/api.js', array(), false, true);
  }
  public static function script_tag_filter($tag, $handle, $src)
  {
    if (preg_match('/^\[([^:]*)\:([^\]]*)\]/', $handle)) {
      preg_match('/^\[([^:]*)\:([^\]]*)\]/', $handle, $matches, PREG_OFFSET_CAPTURE);
      $template = new TemplateHelper();
      $tag =  $template->load('vite-require-helper.twig')->renderBlock('script', ['key' => $matches[1][0], 'value' => $matches[2][0], 'src' => esc_url($src)]);
    }
    return $tag;
  }
  public static function style_tag_filter($tag, $handle, $src)
  {
    if (preg_match('/^\[([^:]*)\:([^\]]*)\]/', $handle)) {
      preg_match('/^\[([^:]*)\:([^\]]*)\]/', $handle, $matches, PREG_OFFSET_CAPTURE);
      $template = new TemplateHelper();
      $tag =  $template->load('vite-require-helper.twig')->renderBlock('style', ['key' => $matches[1][0], 'value' => $matches[2][0], 'href' => esc_url($src)]);
    }
    return $tag;
  }
  public static function get_manifest_file(string $namespace)
  {
    $manifest = file_get_contents(__DIR__ . "/../assets/{$namespace}/manifest.json");
    return json_decode($manifest, true);
  }
}