<?php

namespace App\Http\Controllers;

use App\Models\Lists;
use App\Models\Entity_Type;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class ListingsController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }
    
    public function index(Request $request)
    {
        $query = Lists::query(); // Use List model

        if ($request->has('city') && $request->city != '') {
            $query->where('city', $request->city);
        }

        if ($request->has('search') && $request->search != '') {
            $query->where(function ($q) use ($request) {
                $q->where('title', 'like', '%' . $request->search . '%')
                    ->orWhere('short_title', 'like', '%' . $request->search . '%');
            });
        }

        // $lists = $query->get();
        $lists = $query->orderBy('listing_order')->get();
        $cities = Lists::distinct()->pluck('city'); // Fetch distinct cities

        return view('lists', compact('lists', 'cities'));
    }

    public function homePage()
    {
        return view('home');
    }
    public function getLists()
    {
        $lists = Lists::all();
        return view('lists', compact('lists'));
        
    }

    public function createList()
    {
        $entity_type = Entity_Type::all();

        return view('listCreate',compact('entity_type'));
    }

    public function saveList(Request $request)
    {
        $validatedData = $request->validate([
            'city' => 'required|string|max:255',
            'title' => 'required|string|max:255',
            'short_title' => 'required|string|max:255',
            'imageURL' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048',
            'listing_order' => 'required|integer',
            'entity_type_id' => 'required|integer'
        ]);

        if ($request->hasFile('imageURL')) {
            $path = $request->file('imageURL')->store('images', 's3');
            $url = Storage::disk('s3')->url($path);
            $validatedData['imageURL'] = $url;
        }


        Lists::create($validatedData);
        return redirect()->route('lists')->with('success', 'List created successfully.');
    }

    public function viewList($list_id)
    {
        $list = Lists::findOrFail(decrypt($list_id));
        return view('listView', compact('list'));
    }

    public function editList($list_id)
    {
        $entity_type = Entity_Type::all();

        $list = Lists::find(decrypt($list_id));
        return view('listEdit', compact('list','entity_type'));
    }

    public function updateList(Request $request, $list_id)
    {
        $validatedData = $request->validate([
            'city' => 'required|string|max:255',
            'title' => 'required|string|max:255',
            'short_title' => 'required|string|max:255',
            'imageURL' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
            'listing_order' => 'required|integer',
            'entity_type_id' => 'required|integer'
        ]);

        $list = Lists::findOrFail(decrypt($list_id));

        if ($request->hasFile('imageURL')) {
            if ($list->imageURL) {
                // Assuming the URL structure contains the S3 bucket path, extract and delete it
                $path = parse_url($list->imageURL, PHP_URL_PATH);
                Storage::disk('s3')->delete(ltrim($path, '/'));
            }
            $path = $request->file('imageURL')->store('images', 's3');
            $url = Storage::disk('s3')->url($path);
            $validatedData['imageURL'] = $url;
        }

        $list->update($validatedData);
        return redirect()->route('lists')->with('success', 'List updated successfully.');
    }

    public function deleteList($list_id)
    {
        $list = Lists::findOrFail(decrypt($list_id));
        $list->delete();

        return redirect()->route('lists')->with('success', 'List deleted successfully.');
    }
}
