<?php

namespace App\Controllers\Admin;

use App\Controllers\BaseController;
use App\Models\CompanyModel;
use App\Models\NotificationSettingModel;

/**
 * إعدادات الشركة النشطة حالياً:
 * - أيام التنبيهات وبريد الأدمن
 * - شعار الشركة، ونص هيدر/فوتر مخصص يظهر في الفواتير والعروض والتقارير
 */
class SettingsController extends BaseController
{
    public function edit()
    {
        $companyId = $this->currentCompanyId();
        $model = new NotificationSettingModel();
        $setting = $model->where('company_id', $companyId)->first();

        $company = $companyId ? (new CompanyModel())->find($companyId) : null;

        return view('admin/settings/form', ['setting' => $setting, 'company' => $company]);
    }

    public function update()
    {
        $companyId = $this->currentCompanyId();

        if (! $companyId) {
            return redirect()->to('/admin/settings')->with('error', 'لا يوجد شركة نشطة محددة حالياً - اختر شركة من الأعلى أولاً.');
        }

        // 1) حفظ إعدادات التنبيهات
        $model = new NotificationSettingModel();
        $setting = $model->where('company_id', $companyId)->first();

        $data = [
            'company_id' => $companyId,
            'renewal_days_before' => $this->cleanDays($this->request->getPost('renewal_days_before')),
            'invoice_due_days_before' => $this->cleanDays($this->request->getPost('invoice_due_days_before')),
            'admin_notification_email' => $this->request->getPost('admin_notification_email'),
        ];

        $success = $setting
            ? $model->update($setting['id'], $data)
            : $model->insert($data);

        if ($success === false) {
            return redirect()->to('/admin/settings')->with('error', 'فشل حفظ إعدادات التنبيهات: ' . implode(' | ', $model->errors() ?: ['خطأ غير معروف']));
        }

        // 2) حفظ بيانات الشركة (شعار + هيدر + فوتر)
        $companyModel = new CompanyModel();
        $companyData = [
            'invoice_header_note' => $this->request->getPost('invoice_header_note'),
            'invoice_footer_note' => $this->request->getPost('invoice_footer_note'),
        ];

        $logoFile = $this->request->getFile('logo');
        if ($logoFile && $logoFile->isValid() && ! $logoFile->hasMoved()) {
            if (! is_dir(FCPATH . 'uploads/logos')) {
                mkdir(FCPATH . 'uploads/logos', 0755, true);
            }

            $newName = 'company_' . $companyId . '_' . time() . '.' . $logoFile->getExtension();
            $logoFile->move(FCPATH . 'uploads/logos', $newName);
            $companyData['logo'] = $newName;
        }

        $companyModel->update($companyId, $companyData);

        return redirect()->to('/admin/settings')->with('message', lang('App.saved_successfully'));
    }

    /** تنظيف قائمة الأيام المدخلة يدوياً (مثال: "15, 7 ,3،1" => "15,7,3,1") */
    private function cleanDays(?string $raw): string
    {
        $raw = str_replace('،', ',', (string) $raw); // دعم الفاصلة العربية كمان
        $parts = array_filter(array_map('trim', explode(',', $raw)));
        $numbers = array_filter(array_map('intval', $parts), fn ($n) => $n > 0);

        return $numbers ? implode(',', $numbers) : '7,3,1';
    }
}
