<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\BackupDestination;
use App\Models\Setting;
use Illuminate\Http\Request;

class BackupDestinationController extends Controller
{
    /**
     * Afișează setările de backup
     */
    public function index()
    {
        $destinations = BackupDestination::latest()->get();
        
        return view('admin.backups.settings', compact('destinations'));
    }
    
    /**
     * Salvează o destinație nouă
     */
    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'type' => 'required|in:local,ftp,sftp,ssh,s3,google_drive',
            'config' => 'required|array',
        ]);
        
        // Dacă este setată ca default, dezactivează alte destinații default
        if ($request->boolean('is_default')) {
            BackupDestination::where('is_default', true)->update(['is_default' => false]);
        }
        
        BackupDestination::create([
            'name' => $request->name,
            'type' => $request->type,
            'is_active' => $request->boolean('is_active', true),
            'is_default' => $request->boolean('is_default', false),
            'config' => $request->config,
            'max_backups' => $request->max_backups ?? 10,
            'retention_days' => $request->retention_days ?? 10,
            'max_storage_mb' => $request->max_storage_mb,
        ]);
        
        return redirect()->route('admin.backups.settings')
            ->with('success', 'Destinație adăugată cu succes!');
    }
    
    /**
     * Actualizează o destinație
     */
    public function update(Request $request, BackupDestination $destination)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'config' => 'required|array',
        ]);
        
        if ($request->boolean('is_default')) {
            BackupDestination::where('is_default', true)
                ->where('id', '!=', $destination->id)
                ->update(['is_default' => false]);
        }
        
        $destination->update([
            'name' => $request->name,
            'is_active' => $request->boolean('is_active', true),
            'is_default' => $request->boolean('is_default', false),
            'config' => $request->config,
            'max_backups' => $request->max_backups ?? 10,
            'retention_days' => $request->retention_days ?? 10,
            'max_storage_mb' => $request->max_storage_mb,
        ]);
        
        return redirect()->route('admin.backups.settings')
            ->with('success', 'Destinație actualizată cu succes!');
    }
    
    /**
     * Șterge o destinație
     */
    public function destroy(BackupDestination $destination)
    {
        $destination->delete();
        
        return redirect()->route('admin.backups.settings')
            ->with('success', 'Destinație ștearsă cu succes!');
    }
    
    /**
     * Testează conexiunea la o destinație
     */
    public function test(BackupDestination $destination)
    {
        try {
            // TODO: Implementeazăare testare conexiune pentru fiecare tip
            $destination->last_test_at = now();
            $destination->last_test_status = 'success';
            $destination->last_test_message = 'Conexiune reușită!';
            $destination->save();
            
            return back()->with('success', 'Test conexiune reușit!');
        } catch (\Exception $e) {
            $destination->last_test_at = now();
            $destination->last_test_status = 'failed';
            $destination->last_test_message = $e->getMessage();
            $destination->save();
            
            return back()->with('error', 'Test eșuat: ' . $e->getMessage());
        }
    }
    
    /**
     * Actualizează setările de notificări
     */
    public function updateSettings(Request $request)
    {
        $request->validate([
            'backup_notification_emails' => 'nullable|string',
        ]);
        
        Setting::set('backup_notification_emails', $request->backup_notification_emails);
        
        return back()->with('success', 'Setările de notificări au fost salvate cu succes!');
    }
}
