class Jeeves::CLI

def generate_commit_message(diff)

def generate_commit_message(diff)
  api_key = ENV['OPENROUTER_API_KEY']
  if api_key.nil? || api_key.empty?
    puts "Error: OPENROUTER_API_KEY environment variable not set"
    exit 1
  end
  model = ENV['GIT_COMMIT_MODEL'] || 'openai/gpt-4o-mini'
  
  prompt_file_path = get_prompt_file_path
  puts "Using prompt file: #{prompt_file_path}"
  prompt = File.read(prompt_file_path).gsub('{{DIFF}}', diff)
  
  uri = URI.parse('https://openrouter.ai/api/v1/chat/completions')
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  
  request = Net::HTTP::Post.new(uri.request_uri)
  request['Content-Type'] = 'application/json'
  request['Authorization'] = "Bearer #{api_key}"
  request['HTTP-Referer'] = 'https://github.com/jeeves-git-commit'
  
  # For reasoning models, use system message to enforce output format
  messages = if model.include?('gpt-5') || model.include?('o1')
    [
      { role: 'system', content: 'You are a git commit message generator. Respond ONLY with the final commit message. Do not show your thinking or reasoning process.' },
      { role: 'user', content: prompt }
    ]
  else
    [
      { role: 'user', content: prompt }
    ]
  end
  
  request_body = {
    model: model,
    messages: messages,
    max_tokens: 1000,
    stop: ["END_COMMIT"]
  }
  
  # Remove any reasoning parameters that cause API errors
  # GPT-5 mini will put reasoning in the reasoning field regardless
  
  request.body = request_body.to_json
  
  begin
    response = http.request(request)
    
    if response.code == '200'
      result = JSON.parse(response.body)
      
      # Better error handling for API response structure
      if result['choices'] && result['choices'][0] && result['choices'][0]['message']
        message = result['choices'][0]['message']
        commit_message = message['content']
        
        if commit_message && !commit_message.strip.empty?
          commit_message = commit_message.strip
          puts "Generated commit message:"
          puts "------------------------"
          puts commit_message
          puts "------------------------"
          return commit_message
        else
          puts "Error: API returned empty commit message"
          puts "This model (#{model}) may not be compatible with direct output."
          puts "Try using a different model with: export GIT_COMMIT_MODEL=\"openai/gpt-4o-mini\""
          exit 1
        end
      else
        puts "Error: Unexpected API response structure"
        puts "Full API response: #{response.body}"
        exit 1
      end
    else
      puts "API Error (#{response.code}): #{response.body}"
      exit 1
    end
  rescue => e
    puts "Error: #{e.message}"
    exit 1
  end
end