module Ariadne::ViewComponents::Commands

def compile_command(debug: false, **kwargs)

def compile_command(debug: false, **kwargs)
  [
    executable(**kwargs),
    "-i",
    local_path("app/assets/stylesheets/ariadne_view_components.css"),
    "-o",
    "app/assets/builds/ariadne_view_components.css",
    "-c",
    local_path("tailwind.config.js"),
  ].tap do |command|
    command << "--minify" unless debug
  end
end

def executable(

def executable(
  exe_path: File.expand_path(File.join(__dir__, "..", "..", "..", "exe"))
)
  if Ariadne::ViewComponents::Upstream::NATIVE_PLATFORMS.keys.none? { |p| Gem::Platform.match(p) }
    raise UnsupportedPlatformException, <<~MESSAGE
      ariadne_view_components does not support the #{platform} platform
      Please install tailwindcss following instructions at https://tailwindcss.com/docs/installation
    MESSAGE
  end
  exe_path = Dir.glob(File.expand_path(File.join(exe_path, "*", "tailwindcss"))).find do |f|
    Gem::Platform.match(File.basename(File.dirname(f)))
  end
  if exe_path.nil?
    raise ExecutableNotFoundException, <<~MESSAGE
      Cannot find the tailwindcss executable for #{platform} in #{exe_path}
      If you're using bundler, please make sure you're on the latest bundler version:
          gem install bundler
          bundle update --bundler
      Then make sure your lock file includes this platform by running:
          bundle lock --add-platform #{platform}
          bundle install
      See `bundle lock --help` output for details.
      If you're still seeing this message after taking those steps, try running
      `bundle config` and ensure `force_ruby_platform` isn't set to `true`. See
      https://github.com/rails/tailwindcss-rails#check-bundle_force_ruby_platform
      for more details.
    MESSAGE
  end
  exe_path
end

def local_path(path)

def local_path(path)
  root = File.expand_path(File.join(__dir__, "..", "..", ".."))
  File.join(root, path)
end

def platform

def platform
  [:cpu, :os].map { |m| Gem::Platform.local.send(m) }.join("-")
end

def watch_command(poll: false, **kwargs)

def watch_command(poll: false, **kwargs)
  compile_command(**kwargs).tap do |command|
    command << "-w"
    command << "-p" if poll
  end
end