<?php

namespace Bot\BotHandler;

trait RegistrationTrait
{

    public function explorerRegistration($chatId, $messageId)
    {
        $user = $this->db->getUserByUserId($this->chatId);
        $this->fileHandler->clearState($this->chatId);
        if ($this->db->registeredExplorerByUserId($this->chatId) && $user['is_registered'] == 1) {
            if ($messageId === null) {
                $this->sendRequest("sendMessage", [
                    "chat_id" => $this->chatId,
                    "text" => "⚠️ شما قبلاً به عنوان طبیعت گرد ثبت نام کرده اید.\n\nدر صورت نیاز به ویرایش اطلاعات، از منوی مربوطه استفاده کنید.",
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [['text' => '🔙 بازگشت به منو', 'callback_data' => 'go_to_menu']]
                        ]
                    ])
                ]);
                return;
            } else {
                $this->sendRequest("editMessageText", [
                    "chat_id" => $this->chatId,
                    "message_id" => $messageId,
                    "text" => "⚠️ شما قبلاً به عنوان طبیعت گرد ثبت نام کرده اید.\n\nدر صورت نیاز به ویرایش اطلاعات، از منوی مربوطه استفاده کنید.",
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [['text' => '🔙 بازگشت به منو', 'callback_data' => 'go_to_menu']]
                        ]
                    ])
                ]);
                return;
            }
        }
        //  $this->deleteMessageWithDelay();
        $this->fileHandler->saveState($this->chatId, "awaiting_user_firstname");
        $this->fileHandler->saveMessageId($this->chatId, $messageId);

        if ($messageId === null) {
            $response = $this->sendRequest("sendMessage", [
                "chat_id" => $this->chatId,
                "text" => "👋 <b>خوش آمدید!</b>\n\n"
                    . "شما در حال تکمیل فرآیند ثبت نام به عنوان یک <b>طبیعت گرد</b> هستید. 🌿\n\n"
                    . "برای شروع، لطفاً <b>نام کوچک</b> خود را وارد کنید: 🖊️\n\n"
                    . "<i>📌 نکته: مطمئن شوید اطلاعات را به درستی وارد می کنید تا مراحل بعدی راحت تر طی شوند. 😊</i>",
                "parse_mode" => "HTML",

                "reply_markup" => json_encode([
                    "inline_keyboard" => [
                        [['text' => 'انصراف ❌', 'callback_data' => 'go_to_menu']]
                    ]
                ])
            ]);
            if (isset($response['result']['message_id'])) {
                $this->fileHandler->saveMessageId($this->chatId, $response['result']['message_id']);
            }
        } else {
            $this->sendRequest("editMessageText", [
                "chat_id" => $this->chatId,
                "message_id" => $messageId,
                "text" => "👋 <b>خوش آمدید!</b>\n\n"
                    . "شما در حال تکمیل فرآیند ثبت نام به عنوان یک <b>طبیعت گرد</b> هستید. 🌿\n\n"
                    . "برای شروع، لطفاً <b>نام کوچک</b> خود را وارد کنید: 🖊️\n\n"
                    . "<i>📌 نکته: مطمئن شوید اطلاعات را به درستی وارد می کنید تا مراحل بعدی راحت تر طی شوند. 😊</i>",
                "parse_mode" => "HTML",
                "reply_markup" => json_encode([
                    "inline_keyboard" => [
                        [['text' => 'انصراف ❌', 'callback_data' => 'go_to_menu']]
                    ]
                ])
            ]);
        }
    }


    public function leaderRegistration($chatId, $messageId)
    {
        $user = $this->db->getUserByUserId($this->chatId);
        $this->fileHandler->clearState($this->chatId);
        if ($this->db->registeredExplorerByUserId($this->chatId) && $user['is_leader'] == 1) {
            if ($messageId === null) {
                $this->sendRequest("sendMessage", [
                    "chat_id" => $this->chatId,
                    "text" => "⚠️ شما قبلاً به عنوان لیدر ثبت نام کرده اید.\n\nدر صورت نیاز به ویرایش اطلاعات، از منوی مربوطه استفاده کنید.",
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [['text' => '🔙 بازگشت به منو', 'callback_data' => 'go_to_menu']]
                        ]
                    ])
                ]);
                return;
            } else {
                $response = $this->sendRequest("editMessageText", [
                    "chat_id" => $this->chatId,
                    "message_id" => $messageId,
                    "text" => "⚠️ شما قبلاً به عنوان لیدر ثبت نام کرده اید.\n\nدر صورت نیاز به ویرایش اطلاعات، از منوی مربوطه استفاده کنید.",
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [['text' => '🔙 بازگشت به منو', 'callback_data' => 'go_to_menu']]
                        ]
                    ])
                ]);
                if (isset($response['result']['message_id'])) {
                    $this->fileHandler->saveMessageId($this->chatId, $response['result']['message_id']);
                }
                return;
            }
        }

        $this->fileHandler->saveMessageId($this->chatId, $messageId);

        $this->fileHandler->saveState($this->chatId, "awaiting_leader_firstname");
        if ($messageId === null) {

            $this->sendRequest("sendMessage", [
                "chat_id" => $this->chatId,
                "text" => "👋 <b>خوش آمدید!</b>\n\n"
                    . "شما در حال تکمیل فرآیند ثبت نام به عنوان یک <b>لیدر</b> هستید. 🌟\n\n"
                    . "برای شروع، لطفاً <b>نام کوچک</b> خود را وارد کنید: 🖊️\n\n"
                    . "<i>📌 نکته: مطمئن شوید اطلاعات را به درستی وارد می کنید تا مراحل بعدی راحت تر طی شوند. 😊</i>",
                "parse_mode" => "HTML",

                "reply_markup" => json_encode([
                    "inline_keyboard" => [
                        [['text' => 'انصراف ❌', 'callback_data' => 'go_to_menu']]
                    ]
                ])
            ]);
        } else {
            $this->sendRequest("editMessageText", [
                "chat_id" => $this->chatId,
                "message_id" => $messageId,
                "text" => "👋 <b>خوش آمدید!</b>\n\n"
                    . "شما در حال تکمیل فرآیند ثبت نام به عنوان یک <b>لیدر</b> هستید. 🌟\n\n"
                    . "برای شروع، لطفاً <b>نام کوچک</b> خود را وارد کنید: 🖊️\n\n"
                    . "<i>📌 نکته: مطمئن شوید اطلاعات را به درستی وارد می کنید تا مراحل بعدی راحت تر طی شوند. 😊</i>",
                "parse_mode" => "HTML",
                "reply_markup" => json_encode([
                    "inline_keyboard" => [
                        [['text' => 'انصراف ❌', 'callback_data' => 'go_to_menu']]
                    ]
                ])
            ]);
        }
    }


    public function showLeaderEditMenu($chatId, $messageId)
    {
        $fields = [
            'first_name'     => ['label' => 'نام', 'emoji' => '👨‍💼'],
            'last_name'      => ['label' => 'نام خانوادگی', 'emoji' => '👨‍💼'],
            'nick_name'      => ['label' => 'نام مستعار', 'emoji' => '🏷️'],
            'phone'          => ['label' => 'شماره همراه', 'emoji' => '📱'],
            'city'           => ['label' => 'شهر', 'emoji' => '🏙️'],
            'address'        => ['label' => 'آدرس', 'emoji' => '📍'],
            'date_of_birth'  => ['label' => 'تاریخ تولد', 'emoji' => '🎂'],
            'national_code'  => ['label' => 'کد ملی', 'emoji' => '🆔'],
            'channel'        => ['label' => 'آیدی کانال', 'emoji' => '📣'],
            'group_link'     => ['label' => 'لینک گروه', 'emoji' => '👥'],
            'card_number'    => ['label' => 'شماره کارت', 'emoji' => '💳'],
            'sheba'          => ['label' => 'شماره شبا', 'emoji' => '🏦'],
        ];

        $keyboard = [];
        $row = [];

        foreach ($fields as $key => $item) {
            $row[] = ["text" => "{$item['emoji']} {$item['label']}", "callback_data" => "edit_leader_$key"];

            if (count($row) == 2) {
                $keyboard[] = $row;
                $row = [];
            }
        }
        if (!empty($row)) {
            $keyboard[] = $row;
        }
        $keyboard[] = [["text" => "🔙 بازگشت", "callback_data" => "leader_profile_menu"]];

        $this->sendRequest("editMessageText", [
            "chat_id" => $chatId,
            "message_id" => $messageId,
            "text" => "✏️ لطفاً فیلدی که قصد ویرایش آن را دارید انتخاب کنید:",
            "reply_markup" => json_encode(["inline_keyboard" => $keyboard])
        ]);
    }


    public function askForLeaderFieldUpdate($chatId, $messageId, $fieldKey)
    {
        $fields = [
            'first_name'     => ['label' => 'نام', 'emoji' => '👨‍💼'],
            'last_name'      => ['label' => 'نام خانوادگی', 'emoji' => '👨‍💼'],
            'nick_name'      => ['label' => 'نام مستعار', 'emoji' => '🏷️'],
            'phone'          => ['label' => 'شماره همراه', 'emoji' => '📱'],
            'city'           => ['label' => 'شهر', 'emoji' => '🏙️'],
            'address'        => ['label' => 'آدرس', 'emoji' => '📍'],
            'date_of_birth'  => ['label' => 'تاریخ تولد', 'emoji' => '🎂'],
            'national_code'  => ['label' => 'کد ملی', 'emoji' => '🆔'],
            'channel'        => ['label' => 'آیدی کانال', 'emoji' => '📣'],
            'group_link'     => ['label' => 'لینک گروه', 'emoji' => '👥'],
            'card_number'    => ['label' => 'شماره کارت', 'emoji' => '💳'],
            'sheba'          => ['label' => 'شماره شبا', 'emoji' => '🏦'],
        ];



        $label = $fields[$fieldKey]['label'];
        $emoji = $fields[$fieldKey]['emoji'];
        $buttons[] = [["text" => "🔙 بازگشت", "callback_data" => "edit_leader_menu"]];

        // ثبت وضعیت کاربر که در حال ویرایش چه فیلدی است
        $this->fileHandler->saveState($chatId, 'edit_leader_' . $fieldKey); // مثلاً در جدول `users` فیلد `pending_field`
        if ($label != null) {
            $res = $this->sendRequest("editMessageText", [
                "chat_id" => $chatId,
                "message_id" => $messageId,
                "text" => "✏️ لطفاً مقدار جدید برای <b>$emoji $label</b> را ارسال کنید.",
                "parse_mode" => "HTML",
                "reply_markup" => ["inline_keyboard" => $buttons]
            ]);
            if (isset($res['result']['message_id'])) {
                $this->fileHandler->saveMessageId($this->chatId, $res['result']['message_id']);
            }
        }
    }


    public function handleLeaderFieldUpdate($chatId, $fieldKey, $text)
    {

        $fields = [
            'first_name'     => ['label' => 'نام', 'emoji' => '👨‍💼'],
            'last_name'      => ['label' => 'نام خانوادگی', 'emoji' => '👨‍💼'],
            'nick_name'      => ['label' => 'نام مستعار', 'emoji' => '🏷️'],
            'phone'          => ['label' => 'شماره همراه', 'emoji' => '📱'],
            'city'           => ['label' => 'شهر', 'emoji' => '🏙️'],
            'address'        => ['label' => 'آدرس', 'emoji' => '📍'],
            'date_of_birth'  => ['label' => 'تاریخ تولد', 'emoji' => '🎂'],
            'national_code'  => ['label' => 'کد ملی', 'emoji' => '🆔'],
            'channel'        => ['label' => 'آیدی کانال', 'emoji' => '📣'],
            'group_link'     => ['label' => 'لینک گروه', 'emoji' => '👥'],
            'card_number'    => ['label' => 'شماره کارت', 'emoji' => '💳'],
            'sheba'          => ['label' => 'شماره شبا', 'emoji' => '🏦'],
        ];

        $pendingField = $this->fileHandler->getState($chatId);

        if (!$pendingField || !str_starts_with($pendingField, 'edit_leader_')) {
            $this->sendRequest("sendMessage", [
                "chat_id" => $chatId,
                "text" => "ابتدا فیلدی را برای ویرایش انتخاب کنید."
            ]);
            return;
        }

        // 🔧 حذف پیشوند برای دریافت کلید اصلی
        //  $fieldKey = str_replace('edit_leader_', '', $pendingField);

        if ($fieldKey === 'phone' && !preg_match('/^\+?\d{10,15}$/', $text)) {
            $this->sendRequest("sendMessage", [
                "chat_id" => $chatId,
                "text" => "شماره تلفن معتبر نیست، لطفاً دوباره وارد کنید."
            ]);
            return;
        }


        $updated = $this->db->updateLeaderField($chatId, $fieldKey, $text);

        if (!$updated) {
            $this->sendRequest("sendMessage", [
                "chat_id" => $chatId,
                "text" => "خطا در به روزرسانی اطلاعات، لطفاً دوباره تلاش کنید."
            ]);
            return;
        }

        $this->fileHandler->clearState($chatId);

        $label = $fields[$fieldKey]['label'];
        $emoji = $fields[$fieldKey]['emoji'];
        $messageId = $this->fileHandler->getMessageId($this->chatId);
        $this->sendRequest("editMessageText", [
            "chat_id" => $chatId,
            "message_id" => $messageId,
            "text" => "✅ مقدار <b>$emoji $label</b> با موفقیت به روزرسانی شد.",
            "parse_mode" => "HTML"
        ]);
        sleep(2);
        $this->showLeaderEditMenu($chatId, $messageId);
    }

}
