<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\SmsTemplate;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;

class SmsTemplateController extends Controller
{
    public function index(Request $request): View|RedirectResponse
    {
        $templates = SmsTemplate::orderBy('name')->get();

        if ($templates->isEmpty()) {
            return view('admin.sms-templates.index', [
                'templates' => collect(),
                'template' => null,
            ]);
        }

        $identifier = $request->query('identifier');
        if ($identifier) {
            $template = SmsTemplate::where('identifier', $identifier)->first();
            if ($template === null) {
                return redirect()->route('admin.sms-templates.index')
                    ->with('error', 'Template not found.');
            }
        } else {
            return redirect()->route('admin.sms-templates.show', [
                'identifier' => $templates->first()->identifier,
            ]);
        }

        return view('admin.sms-templates.index', [
            'templates' => $templates,
            'template' => $template,
        ]);
    }

    public function show(string $identifier): View|RedirectResponse
    {
        $template = SmsTemplate::where('identifier', $identifier)->firstOrFail();
        $templates = SmsTemplate::orderBy('name')->get();

        return view('admin.sms-templates.index', [
            'templates' => $templates,
            'template' => $template,
        ]);
    }

    public function update(Request $request, string $identifier): RedirectResponse
    {
        $template = SmsTemplate::where('identifier', $identifier)->firstOrFail();

        $data = $request->validate([
            'body' => 'nullable|string|max:1000',
            'template_id' => 'nullable|string|max:100',
            'is_active' => 'nullable|boolean',
        ]);

        $template->body = $data['body'];
        $template->template_id = $data['template_id'];
        $template->is_active = $request->boolean('is_active');
        $template->save();

        return redirect()->route('admin.sms-templates.show', ['identifier' => $identifier])
            ->with('success', 'SMS template updated successfully.');
    }

    public function create(): View
    {
        $templates = SmsTemplate::orderBy('name')->get();

        return view('admin.sms-templates.create', [
            'templates' => $templates,
        ]);
    }

    public function store(Request $request): RedirectResponse
    {
        $data = $request->validate([
            'identifier' => 'required|string|max:100|unique:sms_templates,identifier|regex:/^[a-z0-9_]+$/',
            'name' => 'required|string|max:255',
            'body' => 'nullable|string|max:1000',
            'template_id' => 'nullable|string|max:100',
            'is_active' => 'nullable|boolean',
        ]);

        SmsTemplate::create([
            'identifier' => $data['identifier'],
            'name' => $data['name'],
            'body' => $data['body'] ?? null,
            'template_id' => $data['template_id'] ?? null,
            'is_active' => $request->boolean('is_active', true),
        ]);

        return redirect()->route('admin.sms-templates.index')
            ->with('success', 'SMS template created successfully.');
    }
}
