<?php

namespace BWDK\Admin\Tools;

use BWDK\Support\Constant;
use BWDK\Support\PhoneHelper;

if (!defined('ABSPATH')) { exit; }

class MigratePhones
{
    public function register(): void
    {
        add_action('admin_menu', [$this, 'addMenuPage']);
        add_action('admin_init', [$this, 'handleMigration']);
    }

    public function addMenuPage(): void
    {
        add_submenu_page(
            'bwdk',
            'مهاجرت شماره موبایل',
            'مهاجرت موبایل',
            'manage_options',
            'bwdk-migrate-phones',
            [$this, 'renderPage'],
            99
        );
    }

    public function handleMigration(): void
    {
        if (!isset($_POST['bwdk_migrate_phones']) || !check_admin_referer('bwdk_migrate_phones_action')) {
            return;
        }

        if (!current_user_can('manage_options')) {
            wp_die('شما دسترسی لازم را ندارید.');
        }

        $migrated = 0;
        $skipped = 0;
        $errors = 0;

        // Get all users
        $users = get_users([
            'number' => -1,
            'fields' => 'all',
        ]);

        foreach ($users as $user) {
            // Skip if already has E164 meta
            if (get_user_meta($user->ID, Constant::META_PHONE_E164, true)) {
                $skipped++;
                continue;
            }

            // Try to get phone from billing_phone
            $billing_phone = get_user_meta($user->ID, 'billing_phone', true);
            if (empty($billing_phone)) {
                $skipped++;
                continue;
            }

            // Normalize phone
            $e164 = PhoneHelper::normalize_to_e164_no_plus($billing_phone);
            if (empty($e164)) {
                $errors++;
                continue;
            }

            // Save E164 meta
            update_user_meta($user->ID, Constant::META_PHONE_E164, $e164);
            $migrated++;
        }

        // Store results in transient for display
        set_transient('bwdk_migration_results', [
            'migrated' => $migrated,
            'skipped' => $skipped,
            'errors' => $errors,
            'total' => count($users),
        ], 60);

        wp_safe_redirect(add_query_arg(['migrated' => '1'], admin_url('admin.php?page=bwdk-migrate-phones')));
        exit;
    }

    public function renderPage(): void
    {
        if (!current_user_can('manage_options')) {
            wp_die('شما دسترسی لازم را ندارید.');
        }

        $results = get_transient('bwdk_migration_results');
        if ($results) {
            delete_transient('bwdk_migration_results');
        }
        ?>
        <div class="wrap">
            <h1>مهاجرت شماره موبایل</h1>
            <p>این ابزار تمام کاربران را اسکن می‌کند و شماره موبایل آن‌ها را به فرمت E.164 نرمال‌سازی می‌کند.</p>
            
            <?php if ($results): ?>
                <div class="notice notice-success is-dismissible">
                    <p>
                        <strong>مهاجرت انجام شد:</strong><br>
                        - کاربران مهاجرت شده: <?php echo esc_html($results['migrated']); ?><br>
                        - کاربران رد شده: <?php echo esc_html($results['skipped']); ?><br>
                        - خطاها: <?php echo esc_html($results['errors']); ?><br>
                        - کل کاربران: <?php echo esc_html($results['total']); ?>
                    </p>
                </div>
            <?php endif; ?>

            <form method="post" action="">
                <?php wp_nonce_field('bwdk_migrate_phones_action'); ?>
                <p>
                    <input type="submit" name="bwdk_migrate_phones" class="button button-primary" value="شروع مهاجرت" 
                           onclick="return confirm('آیا مطمئن هستید که می‌خواهید مهاجرت را شروع کنید؟');">
                </p>
            </form>

            <div class="card">
                <h2>توضیحات</h2>
                <ul>
                    <li>این ابزار فقط کاربرانی را پردازش می‌کند که <code>billing_phone</code> دارند ولی <code>_bwdk_phone_e164</code> ندارند.</li>
                    <li>شماره موبایل به فرمت E.164 (بدون +) نرمال‌سازی می‌شود.</li>
                    <li>این عملیات ایمن است و اطلاعات موجود را تغییر نمی‌دهد.</li>
                </ul>
            </div>
        </div>
        <?php
    }
}



