nhance/app/Controllers/Chatbot/selectInsurerConversations.php
2025-02-07 14:59:39 +05:30

94 lines
3.7 KiB
PHP

<?php
// namespace App\Conversations;
namespace App\Controllers\Chatbot;
use BotMan\BotMan\Messages\Conversations\Conversation;
use BotMan\BotMan\Messages\Outgoing\Question;
use BotMan\BotMan\Messages\Outgoing\Actions\Button;
use App\Helpers\ChatbotHelper;
class selectInsurerConversations extends Conversation
{
public function run()
{
$this->insurerOptions();
}
protected function insurerOptions()
{
$question = Question::create("Choose Your Options:")
->addButtons([
Button::create("🔹 Select Insurers")->value("insurers"),
Button::create("🔹 Talk to our Service Executive")->value("service_executive"),
Button::create("◀️ Go Back")->value("go_back"),
]);
$this->bot->ask($question, function ($answer) {
$path = $this->bot->userStorage()->get('path');
array_push($path,
$answer->getValue()
);
$this->bot->userStorage()->save([
'path' => $path
]);
switch ($answer->getValue()) {
case "insurers":
$data = ChatbotHelper::getInsurersList();
log_message("error",'data: '.json_encode($data));
$question = Question::create("Select an Insurer:");
$page = $this->bot->userStorage()->get('insurer_page') ?? 0;
$perPage = 5;
$totalPages = ceil(count($data) / $perPage);
$insurersToShow = array_slice($data, $page * $perPage, $perPage);
$buttons = [];
foreach ($insurersToShow as $insurer) {
$buttons[] = Button::create("🔹 " . $insurer['short_name'])->value($insurer['short_name']);
}
// Add pagination buttons
if ($page > 0) {
$buttons[] = Button::create("⬅️ Previous")->value("previous_page");
}
if (($page + 1) < $totalPages) {
$buttons[] = Button::create("➡️ Next")->value("next_page");
}
$question = Question::create("Choose an Insurer:")
->addButtons($buttons);
$this->bot->ask($question, function ($response) {
$selected = $response->getValue();
if ($selected == "previous_page") {
$this->bot->userStorage()->save(["insurer_page" => max(0, $this->bot->userStorage()->get('insurer_page') - 1)]);
$this->insurerOptions();
} elseif ($selected == "next_page") {
$this->bot->userStorage()->save(["insurer_page" => $this->bot->userStorage()->get('insurer_page') + 1]);
$this->insurerOptions();
} else {
$this->say("You selected: " . $selected);
}
});
break;
case "service_executive":
$this->bot->startConversation(new serviceExecutiveConversation());
break;
case "go_back":
$this->bot->startConversation(new MainMenuConversation());
break;
default:
$this->say("Invalid selection. Please choose an option.");
$this->policyOptions();
break;
}
});
}
}