module Fastlane
  module Actions
    class PlaystoreSigningConfigAction < Action
      def self.run(params)
        keystore_file_path = params[:keystore_file_path]
        FileUtils.mkdir_p(File.dirname(keystore_file_path))
        File.write(keystore_file_path, Base64.decode64(params[:keystore_base64]))
        {
          "android.injected.signing.store.file" => keystore_file_path,
          "android.injected.signing.store.password" => params[:keystore_password],
          "android.injected.signing.key.alias" => params[:key_alias],
          "android.injected.signing.key.password" => params[:key_password]
        }
      end

      def self.description
        "Generates production signing config properties based on encoded values"
      end

      def self.return_value
        "Hash of signing config properties"
      end

      def self.available_options
        [
          FastlaneCore::ConfigItem.new(key: :keystore_file_path,
            description: "The file path to use for the keystore file",
            verify_block: proc do |value|
              UI.user_error!("keystore_file is not set") if value.empty?
            end),
          FastlaneCore::ConfigItem.new(key: :keystore_base64,
            env_name: "KEYSTORE_BASE64",
            description: "The Android Keystore File (base64 encoded)",
            verify_block: proc do |value|
              if value.nil? || value.empty?
                UI.user_error!("KEYSTORE_BASE64 is not set")
              end
            end),
          FastlaneCore::ConfigItem.new(key: :keystore_password,
            env_name: "KEYSTORE_PASSWORD",
            description: "The Android Keystore Password",
            verify_block: proc do |value|
              if value.nil? || value.empty?
                UI.user_error!("KEYSTORE_PASSWORD is not set")
              end
            end),
          FastlaneCore::ConfigItem.new(key: :key_alias,
            env_name: "KEY_ALIAS",
            description: "The Android Key Alias",
            verify_block: proc do |value|
              if value.nil? || value.empty?
                UI.user_error!("KEY_ALIAS is not set")
              end
            end),
          FastlaneCore::ConfigItem.new(key: :key_password,
            env_name: "KEY_PASSWORD",
            description: "The Android Key Password",
            verify_block: proc do |value|
              if value.nil? || value.empty?
                UI.user_error!("KEY_PASSWORD is not set")
              end
            end)
        ]
      end

      def self.authors
        ["Suno"]
      end

      def self.is_supported?(platform)
        platform == :android
      end
    end
  end
end
