<?php

namespace App\Services\AnalyticsReports;

use App\Utils\AnalyticsReportUserTypes;
use Illuminate\Support\Facades\DB;

class RegisteredUsersReport extends BaseAnalyticsReport implements AnalyticsReportInterface
{
    /**
     * @param null $limit
     * @return \Illuminate\Database\Query\Builder
     */
    public function getQuery($limit = null)
    {
        $query = DB::table('users as u')
            ->whereBetween('u.created_at', [$this->startDate->startOfDay()->toDateTimeString(), $this->endDate->endOfDay()->toDateTimeString()])
            ->orderBy('u.user_id');

        if ($this->country)
            $query->where('u.country_code', $this->country);

        switch ($this->userType) {
            case AnalyticsReportUserTypes::NON_MERCHANTS:
                $query->where('u.is_merchant', '=',0);
                break;
            case AnalyticsReportUserTypes::MERCHANTS:
                $query->where('u.is_merchant', '=',1);
                break;
            default:
                break;
        }

        if ($limit) $query->limit($limit);
        return $query;
    }

    /**
     * @return array
     */
    public function getHeaders()
    {
        return [
            'User ID' => 'u.user_id',
            'First Name' => 'u.first_name',
            'Last Name' => 'u.last_name',
            'Email' => 'u.email',
            'Phone Number' => 'u.phone_number',
            'Is Merchant?' => DB::raw('IF(`u`.`is_merchant`, "Yes", "No") as is_merchant')
        ];
    }

    /**
     * @return string
     */
    public function getCountColumn()
    {
        return 'u.user_id';
    }
}