<?php
declare(strict_types=1);

namespace App\Controllers;

use App\Core\Controller;
use App\Core\SessionAuth;
use App\Repositories\LocationRepository;

final class LocationsController extends Controller
{
    public function index(): void
    {
        app()->get(SessionAuth::class)->requireLogin();
        $repo = new LocationRepository();
        $rows = $repo->allLocations();
        $this->view('locations/index', compact('rows'));
    }

    public function store(): void
    {
        app()->get(SessionAuth::class)->requireLogin();
        verify_csrf();

        $name = trim((string)($_POST['name'] ?? ''));
        if ($name === '') {
            flash('error', 'يرجى إدخال اسم الموقع / الرف');
            redirect(base_url('?page=locations'));
        }

        (new LocationRepository())->create([
            'name' => $name,
            'is_active' => !empty($_POST['is_active']) ? 1 : 0,
        ]);

        flash('success', 'تمت إضافة الموقع بنجاح');
        redirect(base_url('?page=locations'));
    }

    public function update(): void
    {
        app()->get(SessionAuth::class)->requireLogin();
        verify_csrf();

        $id = (int)($_POST['id'] ?? 0);
        $name = trim((string)($_POST['name'] ?? ''));

        if ($id <= 0 || $name === '') {
            flash('error', 'بيانات الموقع غير مكتملة');
            redirect(base_url('?page=locations'));
        }

        (new LocationRepository())->updateLocation($id, [
            'name' => $name,
            'is_active' => !empty($_POST['is_active']) ? 1 : 0,
        ]);

        flash('success', 'تم تحديث الموقع بنجاح');
        redirect(base_url('?page=locations'));
    }

    public function delete(): void
    {
        app()->get(SessionAuth::class)->requireLogin();
        verify_csrf();

        $id = (int)($_POST['id'] ?? 0);
        if ($id <= 0) {
            flash('error', 'معرّف الموقع غير صالح');
            redirect(base_url('?page=locations'));
        }

        $repo = new LocationRepository();
        if ($repo->hasItems($id)) {
            flash('error', 'لا يمكن حذف الموقع لأنه مرتبط بقطع موجودة');
            redirect(base_url('?page=locations'));
        }

        $repo->deleteLocation($id);
        flash('success', 'تم حذف الموقع بنجاح');
        redirect(base_url('?page=locations'));
    }
}
