<?php
if (! defined('__TYPECHO_ROOT_DIR__')) {
    exit;
}

/**
 * افزودن فیلدهای سفارشی به پست‌ها
 *
 * @param Typecho_Widget_Helper_Layout $layout - آبجکت لایه‌بندی فرم
 */
function themeFields($layout)
{
    // ایجاد فیلد برای تصویر شاخص پست
    $thumbnail = new Typecho_Widget_Helper_Form_Element_Text(
        'thumbnail', null, null, 'آدرس تصویر شاخص', 'در صورت خالی گذاشتن، اولین تصویر پست استفاده می‌شود.'
    );
    $layout->addItem($thumbnail);
}

/**
 * پیکربندی تنظیمات تم
 *
 * @param Typecho_Widget_Helper_Form $form - آبجکت فرم تنظیمات
 */
function themeConfig($form)
{
    // آدرس لوگو هدر
    $headerLogoUrl = new Typecho_Widget_Helper_Form_Element_Text(
        'headerLogoUrl',
        null,
        Helper::options()->themeUrl . '/images/logo.png',
        'آدرس لوگو هدر',
        'در صورت خالی گذاشتن، لوگوی پیش‌فرض (images/logo.png) استفاده می‌شود.'
    );
    $form->addInput($headerLogoUrl);

    // آدرس لوگو فوتر
    $footerLogoUrl = new Typecho_Widget_Helper_Form_Element_Text(
        'footerLogoUrl',
        null,
        Helper::options()->themeUrl . '/images/footer-logo.png',
        'آدرس لوگو فوتر',
        'در صورت خالی گذاشتن، لوگوی پیش‌فرض فوتر (images/footer-logo.png) استفاده می‌شود.'
    );
    $form->addInput($footerLogoUrl);

    // آدرس فاوآیکون
    $faviconUrl = new Typecho_Widget_Helper_Form_Element_Text(
        'faviconUrl',
        null,
        Helper::options()->themeUrl . '/images/favicon.png',
        'آدرس فاوآیکون',
        'در صورت خالی گذاشتن، فاوآیکون پیش‌فرض (images/favicon.png) استفاده می‌شود.'
    );
    $form->addInput($faviconUrl);

    // حالت نمایش صفحه اصلی
    $form->addInput(new Typecho_Widget_Helper_Form_Element_Radio(
        'indexViewMode',
        ['card' => 'حالت کارتی', 'list' => 'حالت لیستی'],
        'card',
        'طرح‌بندی صفحه اصلی'
    ));

    // نمایش یا عدم نمایش نوار کناری
    $form->addInput(new Typecho_Widget_Helper_Form_Element_Radio(
        'showSidebar',
        ['1' => 'فعال', '0' => 'غیرفعال'],
        '1',
        'فعال کردن نوار کناری برای طرح‌بندی کارتی'
    ));

    // دسته‌بندی‌های نمایش داده شده در منو
    $form->addInput(new Typecho_Widget_Helper_Form_Element_Text(
        'showCategoryIds', null, '', 'شناسه دسته‌بندی‌های نمایش داده شده در منو',
        'شناسه دسته‌بندی‌ها را با کاما جدا کنید. مثال: 1,3,5'
    ));
}

/**
 * استخراج اولین تصویر از محتوای پست
 *
 * @param Widget_Abstract $widget - آبجکت ویجت پست
 * @return string - آدرس تصویر
 */
function getFirstImage($widget)
{
    if (preg_match('/<img.*?src=[\'"](.*?)[\'"]/i', $widget->content, $matches)) {
        return $matches[1];
    }
    return Helper::options()->themeUrl . '/images/default-thumb.jpg';
}

/**
 * تعداد پست‌های منتشر شده توسط یک نویسنده
 *
 * @param int $uid - شناسه کاربری نویسنده
 * @return int - تعداد پست‌ها
 */
function getAuthorPostsCount($uid)
{
    $db    = Typecho_Db::get();
    $posts = $db->fetchObject(
        $db->select(['COUNT(*)' => 'count'])
            ->from('table.contents')
            ->where('authorId = ?', $uid)
            ->where('type = ?', 'post')
            ->where('status = ?', 'publish')
            ->where('password IS NULL')
    );
    return $posts->count;
}

/**
 * تعداد نظرات تایید شده یک کاربر
 *
 * @param int $uid - شناسه کاربری
 * @return int - تعداد نظرات
 */
function getAuthorCommentsCount($uid)
{
    $db       = Typecho_Db::get();
    $comments = $db->fetchObject(
        $db->select(['COUNT(*)' => 'count'])
            ->from('table.comments')
            ->where('authorId = ?', $uid)
            ->where('status = ?', 'approved')
    );
    return $comments->count;
}

/**
 * تاریخ عضویت کاربر
 *
 * @param int $uid - شناسه کاربری
 * @return string - تاریخ به فرمت Y/m/d
 */
function getUserJoinDate($uid)
{
    $db   = Typecho_Db::get();
    $user = $db->fetchRow(
        $db->select('created')
            ->from('table.users')
            ->where('uid = ?', $uid)
    );
    return date('Y/m/d', $user['created']);
}

/**
 * آخرین زمان ورود کاربر
 *
 * @param int $uid - شناسه کاربری
 * @return string - تاریخ آخرین ورود یا پیغام عدم ورود
 */
function getUserLastLogin($uid)
{
    $db   = Typecho_Db::get();
    $user = $db->fetchRow(
        $db->select()->from('table.users')->where('uid = ?', $uid)
    );

    if ($user && $user['logged'] > 0) {
        return date('Y/m/d', $user['logged']);
    } else {
        return 'هنوز وارد نشده است';
    }
}

/**
 * تولید رنگ برای دسته‌بندی بر اساس شناسه
 *
 * @param int $cid - شناسه دسته‌بندی
 * @return string - کد رنگ HSL
 */
function getCategoryColor($cid)
{
    $hue = ($cid * 47) % 360;
    return "hsl($hue, 70%, 55%)";
}

/**
 * تولید رنگ برای برچسب بر اساس شناسه
 *
 * @param int $mid - شناسه برچسب
 * @return string - کد رنگ HSL
 */
function getTagColor($mid)
{
    $hue = ($mid * 37) % 360;
    return "hsl($hue, 75%, 50%)";
}

/**
 * دریافت شناسه برچسب از آرشیو
 *
 * @param Widget_Archive $archive - آبجکت آرشیو
 * @return int - شناسه برچسب یا 0
 */
function getArchiveTagId($archive)
{
    if ($archive->is('tag') && method_exists($archive, 'getArchiveSlug')) {
        $db  = Typecho_Db::get();
        $tag = $db->fetchRow(
            $db->select()->from('table.metas')->where('slug = ?', $archive->getArchiveSlug())->limit(1)
        );
        if ($tag) {
            return $tag['mid'];
        }
    }
    return 0;
}

/**
 * دریافت دسته‌بندی‌های انتخاب شده برای نمایش در منو
 *
 * @return array - آرایه شناسه دسته‌بندی‌ها
 */
function getSelectedCategories()
{
    $options = Helper::options();
    $idsStr  = $options->showCategoryIds;
    if (! $idsStr) {
        return [];
    }

    $idsArr = array_filter(array_map('intval', explode(',', $idsStr)));
    return $idsArr;
}
