<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class MapSetting extends Model
{
    use HasFactory;

    protected $fillable = [
        'mapbox_access_token', // للتوافق مع البيانات القديمة
        'google_maps_api_key', // Google Maps API Key
        'default_map_style',
        'available_map_styles',
        'max_zoom',
        'min_zoom',
        'default_lat',
        'default_lng',
        'default_zoom',
        'is_active',
    ];

    protected $casts = [
        'available_map_styles' => 'array',
        'is_active' => 'boolean',
        'max_zoom' => 'integer',
        'min_zoom' => 'integer',
        'default_lat' => 'decimal:8',
        'default_lng' => 'decimal:8',
        'default_zoom' => 'integer',
    ];

    /**
     * الحصول على الإعدادات النشطة
     */
    public static function getActiveSettings()
    {
        return static::where('is_active', true)->first();
    }

    /**
     * تحديث أو إنشاء إعدادات الخريطة
     */
    public static function updateOrCreateSettings($data)
    {
        return static::updateOrCreate(
            ['is_active' => true],
            $data
        );
    }

    /**
     * الحصول على أنماط الخرائط المتاحة
     */
    public function getAvailableStyles()
    {
        return $this->available_map_styles ?? [
            'roadmap' => 'الطرق (Roadmap)',
            'satellite' => 'الأقمار الصناعية (Satellite)',
            'hybrid' => 'هجين (Hybrid)',
            'terrain' => 'الطبوغرافي (Terrain)',
        ];
    }

    /**
     * الحصول على نمط الخريطة الافتراضي
     */
    public function getDefaultStyle()
    {
        return $this->default_map_style ?? 'roadmap';
    }

    /**
     * الحصول على مركز الخريطة الافتراضي
     */
    public function getDefaultCenter()
    {
        return [
            'lat' => $this->default_lat ?? 31.9539, // الناصرية
            'lng' => $this->default_lng ?? 46.2575, // الناصرية
            'zoom' => $this->default_zoom ?? 12,
        ];
    }

    /**
     * الحصول على مستويات التكبير
     */
    public function getZoomLevels()
    {
        return [
            'min' => $this->min_zoom ?? 8,
            'max' => $this->max_zoom ?? 18,
            'default' => $this->default_zoom ?? 12,
        ];
    }
}
