<?php

namespace App\Livewire\Admin\Language;

use Livewire\Component;
use App\Models\Admin\Language;
use Livewire\Attributes\Url;
use Livewire\WithPagination;

class ShowLanguages extends Component
{
    use WithPagination;

    #[Url(as: 'q')]
    public $search = '';

    public $paginate = 25;

    public function mount()
    {
        $storedPaginate = session('paginate', $this->paginate);
        $this->paginate = $storedPaginate;
    }

    public function updatedPaginate($value)
    {
        session(['paginate' => $value]);
    }

    public function updatingSearch()
    {
        $this->resetPage();
    }

    public function changeStatus($id)
    {
        $language = Language::find($id);

        $language->status = !$language->status;
        $language->save();

        activity()->performedOn($language)->causedBy(auth()->id())->log('Dil durumu güncellendi');

        $this->dispatch('showAlert', [
            'title' => 'Başarılı!', 'text' => 'Dil durumu başarıyla değiştirildi.', 'icon' => 'success'
        ]);
    }

    public function changeDefault($id)
    {
        $language = Language::find($id);

        if ($language->default) {
            $this->dispatch('showAlert', [
                'title' => 'Uyarı!', 'text' => 'Varsayılan dil değiştirilemez.', 'icon' => 'warning'
            ]);
            $this->dispatch('resetSwitch', id: $id);
            return;
        }

        $language->default = true;

        if($language->status == 0){
            $language->status = 1;
        }

        $language->save();

        activity()->performedOn($language)->causedBy(auth()->id())->log('Varsayılan dil güncellendi');

        Language::where('id', '!=', $id)->update(['default' => false]);

        $this->dispatch('showAlert', [
            'title' => 'Başarılı!', 'text' => 'Varsayılan dil başarıyla değiştirildi.', 'icon' => 'success'
        ]);

        return $this->redirectRoute('admin.languages.index', navigate: true);
    }

    public function updateOrder($list)
    {
        foreach ($list as $item) {
            Language::find($item['value'])->update(['ordernum' => $item['order']]);
        }

        activity()->causedBy(auth()->id())->log('Dil sıralaması güncellendi');

        $this->dispatch('showAlert', [
            'title' => 'Başarılı!', 'text' => 'Dil sıralaması başarıyla güncellendi.', 'icon' => 'success'
        ]);
    }

    public function render()
    {
        $getLanguages = Language::orderBy('default', 'desc')
                    ->orderBy('status', 'desc')
                    ->orderByRaw('CASE WHEN ordernum = 0 THEN 99999 ELSE ordernum END')
                    ->search($this->search)
                    ->orderBy('title')
                    ->paginate($this->paginate);

        return view('livewire.admin.language.show-languages', [
            'getLanguages' => $getLanguages,
        ]);
    }
}
