50 lines
1.4 KiB
Ruby
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
|