<?php

namespace App\Http\Controllers\Agency\Tour;

use App\Http\Controllers\Controller;
use App\Models\Tour\Tour;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class TourSettingsController extends Controller
{
    use AuthorizesRequests;

    public function index(Tour $tour)
    {
        $this->authorize('update', $tour);

        return view('agency.products.kultur-turlari.settings', compact('tour'));
    }

    public function update(Request $request, Tour $tour)
    {
        $this->authorize('update', $tour);

        $validator = \Validator::make($request->all(), [
            'is_active' => 'boolean',
            'is_public' => 'boolean',
            'is_bookable' => 'boolean',
            'published_at' => 'nullable|date',
            'expires_at' => 'nullable|date|after:published_at',
            'is_featured' => 'boolean',
            'is_bestseller' => 'boolean',
            'is_new' => 'boolean',
            'priority' => 'integer|min:0|max:100',
            'instant_booking' => 'boolean',
            'booking_deadline_hours' => 'integer|min:0',
            'min_participants' => 'integer|min:1',
            'max_participants' => 'nullable|integer|min:1|gte:min_participants',
            'refundable' => 'boolean',
            'cancellation_deadline_hours' => 'integer|min:0',
            'child_friendly' => 'boolean',
            'infant_allowed' => 'boolean',
            'min_age' => 'nullable|integer|min:0|max:100',
            'max_age' => 'nullable|integer|min:0|max:100|gte:min_age',
        ], [
            'expires_at.after' => 'Son geçerlilik tarihi, yayın tarihinden sonra olmalıdır.',
            'max_participants.gte' => 'Maksimum katılımcı sayısı, minimum katılımcı sayısından az olamaz.',
            'max_age.gte' => 'Maksimum yaş, minimum yaştan küçük olamaz.',
            'priority.max' => 'Öncelik değeri en fazla 100 olabilir.',
            'booking_deadline_hours.min' => 'Rezervasyon son tarihi negatif olamaz.',
            'cancellation_deadline_hours.min' => 'İptal son tarihi negatif olamaz.',
            'min_participants.min' => 'Minimum katılımcı sayısı en az 1 olmalıdır.',
        ]);

        if ($validator->fails()) {
            return response()->json([
                'success' => false,
                'errors' => $validator->errors()
            ], 422);
        }

        try {
            $tour->update($request->only([
                'is_active',
                'is_public',
                'is_bookable',
                'published_at',
                'expires_at',
                'is_featured',
                'is_bestseller',
                'is_new',
                'priority',
                'instant_booking',
                'booking_deadline_hours',
                'min_participants',
                'max_participants',
                'refundable',
                'cancellation_deadline_hours',
                'child_friendly',
                'infant_allowed',
                'min_age',
                'max_age',
            ]));

            return response()->json([
                'success' => true,
                'message' => 'Tur ayarları başarıyla güncellendi.'
            ]);

        } catch (\Exception $e) {
            \Log::error('Tour settings update error: ' . $e->getMessage());

            return response()->json([
                'success' => false,
                'message' => 'Ayarlar güncellenirken bir hata oluştu.'
            ], 500);
        }
    }

    public function archive(Tour $tour)
    {
        $this->authorize('delete', $tour);

        try {
            $tour->update([
                'is_active' => false,
                'is_public' => false,
                'is_bookable' => false,
            ]);

            return response()->json([
                'success' => true,
                'message' => 'Tur başarıyla arşivlendi.'
            ]);

        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'Arşivleme işlemi başarısız.'
            ], 500);
        }
    }

    public function destroy(Tour $tour)
    {
        $this->authorize('delete', $tour);

        DB::beginTransaction();
        try {
            // Tur ilişkili tüm verilerle birlikte silinir (cascade delete)
            $tour->delete();

            DB::commit();

            return response()->json([
                'success' => true,
                'message' => 'Tur başarıyla silindi.'
            ]);

        } catch (\Exception $e) {
            DB::rollback();
            \Log::error('Tour delete error: ' . $e->getMessage());

            return response()->json([
                'success' => false,
                'message' => 'Silme işlemi başarısız: ' . $e->getMessage()
            ], 500);
        }
    }
}
