<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\DB;
use Yajny\Member\Models\Member;

class AnalyticsEvent extends GenericCentral
{
    protected $connection = 'analytics';
    protected $primaryKey = 'id';
    protected $casts = ['data' => 'array'];
    protected $guarded = [];

    public $module = 'analytics';
    public $timestamps = true;

    public function __construct()
    {
        parent::__construct();
    }

    public static function querySelect()
    {
        return "  SELECT analytics.* FROM analytics  ";
    }

    public static function queryWhere()
    {
        return "  WHERE analytics.id IS NOT NULL ";
    }

    public static function queryGroup()
    {
        return "  ";
    }

    public function user()
    {
        $newResource = clone $this;
        return $newResource->setConnection('mysql')->belongsTo(Member::class, 'user_id', 'user_id');
    }

    public function platform()
    {
        return $this->belongsTo(AnalyticsPlatform::class, 'platform_id');
    }

    protected static function boot()
    {
        parent::boot();
        static::addGlobalScope('defaultApp', function (Builder $builder) {
            $builder->where('application_id', config('analytics.app_id'));
        });
    }

    public function getExportHeaders() : array
    {
        return [
            'Event' => 'analytics_events.name',
            'UTM Source' => DB::raw("`analytics_events`.`data`->>'$.utm_source'"),
            'UTM Campaign' => DB::raw("`analytics_events`.`data`->>'$.utm_campaign'"),
            'UTM Medium' => DB::raw("`analytics_events`.`data`->>'$.utm_medium'"),
            'Platform' => 'platforms.title',
            'Time' => 'analytics_events.created_at',
            'User ID' => 'analytics_events.user_id',
            'URL' => 'analytics_events.url',
            'Country' => 'analytics_events.country'
        ];
    }
}
