chatwoot-develop/enterprise/app/services/captain/tools/check_availability_tool.rb
2026-01-12 19:04:15 -03:00

50 lines
1.4 KiB
Ruby

module Captain
module Tools
class CheckAvailabilityTool < BaseTool
def name
'check_availability'
end
def description
'Checks for available suites for a given date range. Input: check_in (YYYY-MM-DD), duration (days).'
end
def execute(params = {})
check_in = params['check_in'] || Date.today.to_s
duration = (params['duration'] || 1).to_i
# Simplified Logic: Check Captain::Suite availability (Mocked for now as we don't have full calendar logic yet)
# We need to list available categories.
unit = infer_unit(params)
return 'Erro: Unidade não identificada.' unless unit
categories = unit.visible_suite_categories # defined in Captain::Unit
response = "Disponibilidade para #{check_in} (#{duration} diárias) em #{unit.name}:\n"
categories.each do |cat|
pricing = Captain::Pricing.find_by(
captain_brand: unit.brand,
suite_category: cat,
duration: 'pernoite' # Simplification
)&.price || 150.00
response += "- #{cat}: R$ #{pricing}\n"
end
response
end
private
def infer_unit(_params)
# 1. Deterministic: Inbox -> CaptainInbox -> Unit
return @conversation.inbox.captain_inbox.unit if @conversation&.inbox&.captain_inbox&.unit
# 2. Fallback
Captain::Unit.active.first
end
end
end
end