<?php

namespace App\DataDefinitions\Models\Partner;

use App\DataDefinitions\DataDefinition;
use Illuminate\Database\Eloquent\Model;

class ClubDataDefinition extends DataDefinition
{
    public $name = 'clubs';
    public $model;
    public $settings;
    public $fields;

    public function __construct()
    {
        $this->model = new \App\Models\Club;
		$isAdmin = auth('admin')->check();
        $currentGuard = collect(['admin', 'partner', 'web'])->first(function ($guard) {
			return auth($guard)->check();
		});

        $this->fields = [
            'name' => [
                'text' => trans('common.name'),
                'type' => 'string',
                'highlight' => true,
                'actions' => ['list', 'insert', 'edit', 'view', 'export'],
            ],
            'is_active' => [
                'text' => trans('common.active'),
                'type' => 'boolean',
                'format' => 'icon',
                'actions' => ['list', 'insert', 'edit', 'view', 'export'],
            ],
			'partners' => [
    'text' => trans('common.partners'),
    'type' => 'belongsToMany',
    'name' => 'partners',
    'options' => \App\Models\Partner::all()->pluck('name', 'id')->toArray(),
    // الخطوة السحرية: بنقول للسيستم يقرأ القيمة من العلاقة
    'value' => function($model) {
        // بنجيب مصفوفة بالـ IDs بتاعة المحلات المربوطة فعلاً بالنادي ده
        return $model->partners->pluck('id')->toArray();
    },
    'actions' => ['edit', 'insert'],
],

// وحقل النسب خليه يقرأ برضه عشان الأدمن يشوف هو كان كاتب إيه
/* 'partner_discounts' => [
    'text' => 'نسب الخصم',
    'type' => 'string',
    'value' => function($model) {
        // بنجيب النسب من جدول الربط ونعرضها مفصولة بفاصلة
        return $model->partners->pluck('pivot.discount_percentage')->implode(',');
    },
    'actions' => ['edit', 'insert'],
], */

	'partners_count' => [
    'text' => 'partners count',
    'type' => 'string', // السيستم هيقرأها كـ نص عادي
    'actions' => ['view','list'], // 'view' هنا معناها تظهر في الجدول والـ preview بس، مش في الـ edit
],
        ];

        $this->settings = [
    'icon' => 'layers',
    'title' => trans('common.clubs'),
    'guard' => $currentGuard,
    'roles' => [1,2,3],
    'userMustOwnRecords' => false,
    'itemsPerPage' => 10,
    'actions' => [
        'subject_column' => 'name',
        'list' => true,
        'insert' => auth('admin')->check(),
        'edit'   => auth('admin')->check(),
        'delete' => auth('admin')->check(),
        'view' => true,
        'export' => true,
    ],
];

    }
	public function getRelations(): array
{
    return [
        'partners' => [
            'type' => 'belongsToMany',
            'definition' => \App\DataDefinitions\Models\Partner\PartnerDataDefinition::class, // مسار تعريف البارتنر
            'text' => trans('common.partners'),
        ],
    ];
}
public function beforeSave(\Illuminate\Database\Eloquent\Model $model, array $data): array
{
	dd('الحمد لله الميثود شغالة!', $data, request()->all());
    // 1. التعامل مع الشركاء والنسب في جدول الربط
    if (request()->has('partners')) {
        $model->saved(function ($instance) {
            $partnerIds = (array) request('partners'); 
            $discountsStr = (string) request('partner_discounts', '');
            $discounts = explode(',', $discountsStr);
            
            $syncData = [];
            foreach ($partnerIds as $index => $id) {
                $percentage = isset($discounts[$index]) ? (int) trim($discounts[$index]) : 0;
                $syncData[$id] = ['discount_percentage' => $percentage];
            }
            
            // بنسيف في الجدول الوسيط (club_partners)
            $instance->partners()->sync($syncData);
        });
    }

    // 2. الحتة دي هي اللي هتشيل الـ SQL Error
    // بنشيل أي حقل ملوش عمود في جدول الـ clubs
    if (array_key_exists('partner_discounts', $data)) {
        unset($data['partner_discounts']);
    }
    
    // لو فيه حقل تاني اسمه partners في الـ data شيله برضه عشان ميعملش تعارض
    if (array_key_exists('partners', $data)) {
        unset($data['partners']);
    }

    if (auth('admin')->check()) {
        $data['created_by'] = null;
    }
    
    return $data; // لازم الـ data ترجع هنا وهي "نضيفة"
}

    public function getData(?string $dateDefinitionName = null, string $dateDefinitionView = 'list', array $options = [], ?Model $model = null, array $settings = [], array $fields = []): array
{
    // شيلنا الكود بتاع الـ whereHas عشان الداتا تظهر للكل بدون قيود
    return parent::getData($this->name, $dateDefinitionView, $options, $this->model, $this->settings, $this->fields);
}

    public function getSettings(array $settings): array
    {
        return parent::getSettings($this->settings);
    }
}