require_relative '../helpers/github'

module Fastlane
  module Actions
    class GithubChangedFilesAction < Action
      def self.run(params)
        remote_name = params[:remote]
        if other_action.is_ci
          other_action.ensure_git_status_clean
        end

        diff_range = params[:range] || Github.diff_range(remote_name: remote_name)

        UI.message("Looking up changed files for #{diff_range} ...")
        changed_files_str = Actions.sh("git diff --name-only #{diff_range}", log: true).strip rescue ""
        changed_files = changed_files_str ? changed_files_str.split("\n") : []
        if changed_files.empty?
          UI.important("No changed files found!")
        else
          UI.important("Found #{changed_files.count} changed files:")
          changed_files.each { |file| UI.message("  #{file}") }
        end
        changed_files
      end

      def self.description
        "Get list of changed files between git references, with CI-aware logic"
      end

      def self.authors
        ["Suno"]
      end

      def self.return_value
        "Array of changed file paths"
      end

      def self.available_options
        [
          FastlaneCore::ConfigItem.new(
            key: :remote,
            description: "Remote name for looking up default branch",
            type: String,
            default_value: "origin"
          ),
          FastlaneCore::ConfigItem.new(
            key: :range,
            description: "Diff range (ex: 'origin/main...HEAD')",
            type: String,
            optional: true,
            default_value: nil
          ),
        ]
      end

      def self.is_supported?(platform)
        true
      end
    end
  end
end
