<?php

namespace MintyPHP\Module\AddressBook\Providers;

use MintyPHP\App\Module\Contracts\SearchResourceProvider;

/**
 * Provides the address-book search resource for the global search.
 */
final class AddressBookSearchProvider implements SearchResourceProvider
{
    public function resources(): array
    {
        return [
            'address-book' => [
                'label' => t('Address book'),
                'permission' => 'address_book.view',
                'count_sql' => "select count(*) from users where active = 1 and (first_name like ? escape '\\\\' or last_name like ? escape '\\\\' or email like ? escape '\\\\') {{tenantFilter}}",
                'preview_sql' => "select uuid, first_name, last_name, email from users where active = 1 and (first_name like ? escape '\\\\' or last_name like ? escape '\\\\' or email like ? escape '\\\\') {{tenantFilter}} order by last_name, first_name limit ?",
                'result_sql' => "select uuid, first_name, last_name, email from users where active = 1 and (first_name like ? escape '\\\\' or last_name like ? escape '\\\\' or email like ? escape '\\\\') {{tenantFilter}} order by last_name, first_name",
                'tenant_filter' => 'and exists (select 1 from user_tenants ut where ut.user_id = users.id and ut.tenant_id in (???))',
            ],
        ];
    }

    public function mapResultItem(string $resourceKey, array $row): ?array
    {
        if ($resourceKey !== 'address-book') {
            return null;
        }

        $title = trim(($row['first_name'] ?? '') . ' ' . ($row['last_name'] ?? ''));
        $subtitle = (string) ($row['email'] ?? '');
        $uuid = (string) ($row['uuid'] ?? '');

        if ($title === '' && $subtitle === '') {
            return null;
        }

        return [
            'title' => $title !== '' ? $title : $subtitle,
            'subtitle' => $subtitle,
            'url' => lurl('address-book/view/' . $uuid),
            'icon' => 'bi-people',
        ];
    }

    public function listUrl(string $resourceKey, string $encodedSearch): string
    {
        if ($resourceKey !== 'address-book') {
            return '';
        }

        return lurl('address-book') . '?search=' . $encodedSearch;
    }
}
