<?php

namespace App\Services;

use App\Helpers\IpDetector;
use App\Models\AnalyticsEvent;

class AnalyticsEventService
{
    public function add($request): AnalyticsEvent
    {
        $analyticsEvent = new AnalyticsEvent();
        if ($request->user_id) {
            $user_id = $request->user_id;
        } elseif ($request->has('event_data') && array_key_exists('identity', $request->event_data)) {
            $user_id = $request->event_data['identity'];
        } else {
            $user_id = 0;
        }
        if ($request->event_name == 'user_registered' && AnalyticsEvent::where([['user_id', $user_id], ['name', 'user_registered']])->count())
            return $analyticsEvent;
        if ($request->has('session_id')) {
            $utms = [];
            if ($request->has('event_data')) {
                $keys = array_keys($request->event_data);
                foreach ($keys as $key) {
                    if (preg_match('/^utm_/', $key))
                        $utms[$key] = $request->event_data[$key];
                }
            }
            $analyticsEvent->session_id = $request->session_id;
        }
        $analyticsEvent->name = $request->event_name;
        $analyticsEvent->user_id = $user_id;
        $analyticsEvent->data = $request->has('event_data') ? $request->event_data : null;
        $analyticsEvent->app_screen = $request->has('route_name') ? $request->route_name : null;
        $analyticsEvent->platform_id = $request->platform_id;
        $analyticsEvent->url = $request->has('event_url') ? $request->event_url : null;
        $analyticsEvent->referrer = $request->has('referrer') ? $request->referrer : null;
        $analyticsEvent->app_version = $request->hasHeader('app-version') ? $request->header('app-version') : null;
        $analyticsEvent->country = IpDetector::getCountryCodeFromClientIp();
        $analyticsEvent->ip = $request->ip();
        $analyticsEvent->application_id = $request->application_id;
        if ($request->hasHeader('app-version')) {
            $analyticsEvent->app_version = $request->header('app-version');
        }
        $analyticsEvent->save();
        return $analyticsEvent;
    }
}
