#!/usr/bin/perl

use Modern::Perl;
use FindBin;
use lib "$FindBin::Bin/../lib";    # Pfad zu Koha-Modulen (anpassen falls nötig)

use Koha::Patrons;
use Koha::Script;                  # initialisiert DB, Logging und Koha-Umgebung

# Koha::Script->new->run;
# Koha::Script->new({ script => $0 })->run;


# ================================
# CLI Argument
# ================================
my $term = shift @ARGV;

if ( not $term ) {
    die "Usage: $0 <searchterm>\nExample: $0 john%\n";
}

# ================================
# Query mit LIKE-Operatoren
# ================================

use Time::HiRes qw(time);
my $start = time();

# -- firstname|preferred_name|middle_name|surname|othernames|cardnumber|userid

my $rs = Koha::Patrons->search(
    {
        -or => [
            'me.firstname'                  => { -like => $term },
            'me.preferred_name'             => { -like => $term },
            'me.middle_name'                => { -like => $term },
            'me.surname'                    => { -like => $term },
            'me.othernames'                 => { -like => $term },
            'me.cardnumber'                 => { -like => $term },
            'me.userid'                     => { -like => $term },
            'borrower_attributes.attribute' => { -like => $term },
        ],
    },
    {
        join     => 'borrower_attributes',
#        group_by => 'me.borrowernumber',
        distinct => 1, 
        order_by => 'me.surname',
        rows     => 20,
    }
 );

# my $rs = Koha::Patrons->search(
#     {
#         -or => [
#             'me.firstname'      => { -like => $term },
#             'me.preferred_name' => { -like => $term },
#             'me.middle_name'    => { -like => $term },
#             'me.surname'        => { -like => $term },
#             'me.othernames'     => { -like => $term },
#             'me.cardnumber'     => { -like => $term },
#             'me.userid'         => { -like => $term },
#         ],
#     },
#     {
#         order_by => 'me.surname',
#         rows     => 20,
#     }
# );

# my $rs = Koha::Patrons->_resultset->search_literal(
#     "MATCH (firstname, surname, middle_name, othernames, cardnumber, userid)
#      AGAINST (? IN BOOLEAN MODE)",
#     $term,
#      {
#         order_by => 'me.surname',
#         rows     => 20,
#     }
# );



# ================================
# Ausgabe
# ================================
while ( my $p = $rs->next ) {
    say join "\t",
        $p->borrowernumber,
        $p->cardnumber    // '',
        $p->userid        // '',
        $p->firstname     // '',
        $p->surname       // '';
}

my $elapsed = time() - $start;
printf "Elapsed time: %.6f seconds\n", $elapsed;
