<?php

namespace App\Http\Controllers\Web;

use App\Http\Controllers\Controller;
use App\Models\User;
use App\Services\GiteaIssueService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rule;

class SuggestionController extends Controller
{
    // Afficher le formulaire de suggestion / signalement
    public function create()
    {
        return view('suggestions.create');
    }

    // Traiter la demande et créer un ticket dans Gitea
    public function store(Request $request, GiteaIssueService $gitea)
    {
        $data = $request->validate([
            'type' => ['required', Rule::in(['Modification', 'Ajout', 'Correction'])],
            'titre' => ['required', 'string', 'min:5', 'max:120'],
            'description' => ['required', 'string', 'min:10', 'max:5000'],
        ], [
            'type.required' => 'Veuillez choisir un type de demande.',
            'type.in' => 'Type de demande invalide.',
            'titre.required' => 'Le titre est requis.',
            'titre.min' => 'Le titre doit contenir au moins 5 caractères.',
            'titre.max' => 'Le titre ne peut pas dépasser 120 caractères.',
            'description.required' => 'La description est requise.',
            'description.min' => 'Merci de détailler un peu plus votre demande (10 caractères minimum).',
        ]);

        /** @var User $user */
        $user = Auth::user();
        $auteur = $user->name ?? 'Utilisateur';

        $title = "[{$data['type']}] {$data['titre']}";

        $body = "**Type de demande :** {$data['type']}\n"
            ."**Proposé par :** {$auteur} (via le site CESIZen)\n\n"
            ."### Description\n"
            .$data['description']."\n\n"
            ."---\n"
            .'_Ticket créé automatiquement depuis le formulaire de suggestions du site CESIZen._';

        if ($gitea->createIssue($title, $body)) {
            return redirect()->route('suggestions.create')
                ->with('success', 'Merci ! Votre demande a bien été transmise à l\'équipe.');
        }

        return back()->withInput()->withErrors([
            'gitea' => "L'envoi de votre demande a échoué. Merci de réessayer plus tard.",
        ]);
    }
}
