<?php

namespace App\Models;

use Database\Factories\CatalogLandingPageVisitFactory;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;

#[Fillable([
    'landing_page_id', 'page_load_id', 'query_params', 'ip', 'user_agent',
])]
class CatalogLandingPageVisit extends Model
{
    /** @use HasFactory<CatalogLandingPageVisitFactory> */
    use HasFactory;

    /**
     * @return array<string, string>
     */
    protected function casts(): array
    {
        return [
            'query_params' => 'array',
        ];
    }

    public function landingPage(): BelongsTo
    {
        return $this->belongsTo(LandingPage::class);
    }

    public function clickouts(): HasMany
    {
        return $this->hasMany(CatalogLandingPageClickout::class);
    }

    public function queryParamsSummary(): string
    {
        if (! is_array($this->query_params) || $this->query_params === []) {
            return '';
        }

        $parts = [];

        foreach ($this->query_params as $key => $value) {
            $parts[] = $key.'='.(is_scalar($value) ? (string) $value : (string) json_encode($value, JSON_UNESCAPED_UNICODE));
        }

        return implode(', ', $parts);
    }
}
