<?php

namespace BWDK\Support;

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

class BwdkOrderNote
{
    const META_KEY = '_bwdk_order_note';

    public static function mark_note(int $comment_id): void
    {
        if ($comment_id <= 0) {
            return;
        }

        update_comment_meta($comment_id, self::META_KEY, 1);
    }

    public static function is_marked(int $comment_id): bool
    {
        if ($comment_id <= 0) {
            return false;
        }

        return (int) get_comment_meta($comment_id, self::META_KEY, true) === 1;
    }

    public static function content_matches(string $content): bool
    {
        $text = trim(wp_strip_all_tags($content));
        if ($text === '') {
            return false;
        }

        if (preg_match('/^(BWDK\b|BWDK:|BWDK Sync:|BWDK Verify:|BWDK Verify Error:|BWDK debug:|\[DEBUG\])/i', $text)) {
            return true;
        }

        if (preg_match('/^(دیجی‌اکسپرس:|دیجی‌اکسپرس\b|اطلاعات دیجی‌اکسپرس|بروزرسانی اطلاعات دیجی‌اکسپرس|به‌روزرسانی خودکار وضعیت دیجی‌اکسپرس|لغو ارسال دیجی‌اکسپرس|فعال‌سازی مجدد ارسال دیجی‌اکسپرس|BWDK DigiExpress)/u', $text)) {
            return true;
        }

        if (preg_match('/^(شروع فرایند خرید با BWDK|انصراف از خرید|انصراف از پرداخت|پرداخت با دیجی‌پی|پرداخت به صورت نقدی|درخواست استرداد|وضعیت استرداد:|وضعیت از کالبک|سفارش به کاربر با موبایل|Verify ارسال نشد)/u', $text)) {
            return true;
        }

        if (preg_match('/^(شناسه سفارش دیجی‌اکسپرس|لغو ارسال|فعال‌سازی مجدد|در این مرحله امکان فعال‌سازی|به دلیل شکست تحویل)/u', $text)) {
            return true;
        }

        if (preg_match('/دیجی‌اکسپرس/u', $text) && preg_match('/^(لغو ارسال|بروزرسانی|شناسه)/u', $text)) {
            return true;
        }

        return false;
    }

    public static function should_style($note): bool
    {
        $comment_id = 0;
        $content = '';

        if (is_object($note)) {
            if (isset($note->id)) {
                $comment_id = (int) $note->id;
            }
            if (isset($note->content)) {
                $content = (string) $note->content;
            }
        }

        if ($comment_id > 0 && self::is_marked($comment_id)) {
            return true;
        }

        return self::content_matches($content);
    }
}
