<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\DataTables\InquiriesDataTable;
use App\Http\Requests\Admin\InquiryCreateEditRequest;
use App\Models\Broker;
use App\Models\Project;
use App\Models\Inquiry;
use App\Models\PropertyType;
use App\Models\Reference;
use App\Services\InquiryService;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
use Illuminate\Http\Request;
use App\Models\Message;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Storage;

class InquiryController extends Controller
{
    protected $inquiryService;

    public function __construct(InquiryService $inquiryService)
    {
        $this->inquiryService = $inquiryService;
    }

    public function index(InquiriesDataTable $dataTable)
    {
        $pageTitle = __('app.menu.inquiries');
        $messages = Message::where('status', 'Active')->get();
      //  dd(Message::where('status', 'Active')->get());
        return $dataTable->render('admin.inquiry.index', compact('pageTitle', 'messages'));
    }

    public function create()
    {
        $user = auth()->user();
        $pageTitle = __('app.menu.add_inquiry');
        $inquiry = new \App\Models\Inquiry();
        // $projects = Project::pluck('name', 'id')->toArray();
        // Load projects assigned to user
        $projects = Project::whereIn('id', $user->project_ids)->pluck('name', 'id')->toArray();

        // Log info (for debug only)
        Log::info('Projects loaded for user:', $projects);

        $propertyTypes = PropertyType::pluck('name', 'id')->toArray();
        $references = Reference::pluck('name', 'id')->toArray();
        $brokers = Broker::pluck('name', 'id')->toArray();

        return view('admin.inquiry.create-edit', compact('pageTitle', 'inquiry', 'projects', 'propertyTypes', 'references', 'brokers'));
    }

    public function store(InquiryCreateEditRequest $request)
    {
        $validated = $request->validated();
        $data['property_type_id'] = is_array($request->property_type_id)
            ? implode(',', $request->property_type_id)
            : $request->property_type_id;
        $validated['created_by'] = Auth::id();
        // Log::info('Inquiry Save Request Data:', $validated);
        $this->inquiryService->save($validated);
        return redirect()->route('inquiry.index')->withSuccess(__('messages.created', ['item' => 'Inquiry']));
    }

    public function edit($id)
    {
        $pageTitle = __('app.menu.edit_inquiry');
        $inquiry = $this->inquiryService->getById($id);
        $projects = Project::pluck('name', 'id')->toArray();
        $propertyTypes = PropertyType::pluck('name', 'id')->toArray();
        $references = Reference::pluck('name', 'id')->toArray();
        $brokers = Broker::pluck('name', 'id')->toArray();

        return view('admin.inquiry.create-edit', compact('pageTitle', 'inquiry', 'projects', 'propertyTypes', 'references', 'brokers'));
    }

    public function update(InquiryCreateEditRequest $request, $id)
    {
        $validated = $request->validated();
        // Convert array to string if needed
        $validated['property_type_id'] = is_array($validated['property_type_id'])
            ? implode(',', $validated['property_type_id'])
            : $validated['property_type_id'];

        $this->inquiryService->update($validated, $id);
        return redirect()->route('inquiry.index')->withSuccess(__('messages.updated', ['item' => 'Inquiry']));
    }

    public function destroy($id)
    {
        $deleted = $this->inquiryService->deleteById($id);

        if ($deleted) {
            return response()->json(['title' => __('Deleted!'), 'message' => __('messages.deleted', ['item' => 'Inquiry'])]);
        }

        return response()->json(['title' => __('Error!'), 'message' => __('messages.something_went_wrong')], 500);
    }

    public function show($id)
    {
        $pageTitle = __('app.menu.view_inquiry');
        $inquiry = $this->inquiryService->getById($id);
        $projects = Project::pluck('name', 'id')->toArray();
        $propertyTypes = PropertyType::pluck('name', 'id')->toArray();
        $references = Reference::pluck('name', 'id')->toArray();
        $brokers = Broker::pluck('name', 'id')->toArray();

        return view('admin.inquiry.create-edit', compact('pageTitle', 'inquiry', 'projects', 'propertyTypes', 'references', 'brokers'));
    }

    public function getPropertyTypesByProject(Request $request)
    {
        $project = Project::with('propertyTypes')->find($request->project_id);

        if (!$project) {
            return response()->json([]);
        }

        return response()->json($project->propertyTypes->map(function ($pt) {
            return ['id' => $pt->id, 'text' => $pt->name];
        }));
    }

    public function checkMobile(Request $request)
    {
        $inquiries = Inquiry::where('mobile_no', $request->mobile_no)->get();

        if ($inquiries->isNotEmpty()) {
            return response()->json([
                'exists' => true,
                'count' => $inquiries->count(),
                'inquiries' => $inquiries->map(function ($inquiry) {
                    return [
                        'id' => $inquiry->id,
                        'url' => route('inquiry.show', $inquiry->id),
                        'name' => $inquiry->name,
                        'status' => $inquiry->status,
                        'created_at' => $inquiry->created_at->format('Y-m-d H:i'),
                    ];
                }),
            ]);
        }

        return response()->json(['exists' => false]);
    }


    public function sendprojectmsg(Request $request)
    {
        $request->validate([
            'inquiry_id' => 'required|exists:inquiries,id',
            //'message_template_id' => 'required|exists:messages,id',
        ]);

        $inquiry = Inquiry::findOrFail($request->inquiry_id);

        $project_id  =  $inquiry->project_id ;
        $project = Project::findOrFail($project_id);
       // $finalMessage = str_replace('{{name}}', $inquiry->name, $message->body);
        $projectattachments = $project->attachments;
        $projectdescription = $project->description;
        // ✅ WhatsApp API Config
        $token = 'EAAUqHal7LyEBO53gByInidOQnaZBUYCNX0Egcxawg18ZC3b2DQjZBtu3nXyOZAh5GWLmuUfPa34ObWs9jYy5SUf02yliy5QqdonziheVZBe8A3ZCmCv2ULlYiJtui3CsB9wmPDzgyZBLEMm24GcbfwL4HOKGkB5qLTnB7JF2QgEiEQZCe2TZAkcZBCR9ZBEaOhQdyG0QRmet7LU09vsz5tLcf9FXwwf3Gy3rWZBtNX3ZByaBI';
        $phone_number_id = '571728119368156';
       // $recipientNumber = '91' . $inquiry->whatsapp_no; // Or use ->mobile_no if needed
       $recipientNumber = '+919428503084';
        $mediaId = null;
        $filePath = null;

        // ✅ Handle attachment upload (if any)
        if ($projectattachments && is_array(json_decode($projectattachments))) {
            $attachment = json_decode($projectattachments)[0]->path ?? null;

            if ($attachment && file_exists(storage_path('app/' . $attachment))) {
                $filePath = storage_path('app/' . $attachment);
                $mimeType = mime_content_type($filePath);

                $uploadResponse = Http::withHeaders([
                    'Authorization' => "Bearer $token",
                    'Content-Type' => $mimeType,
                ])->attach(
                    'file', file_get_contents($filePath), basename($filePath)
                )->post("https://graph.facebook.com/v18.0/{$phone_number_id}/media", [
                    'messaging_product' => 'whatsapp',
                    'type' => $mimeType,
                ]);

                $mediaId = $uploadResponse->json()['id'] ?? null;

                Log::info('WhatsApp media upload response:', $uploadResponse->json());
            }
        }

        // ✅ Send message with or without media
        if ($mediaId) {
            $sendResponse = Http::withToken($token)->post("https://graph.facebook.com/v18.0/{$phone_number_id}/messages", [
                'messaging_product' => 'whatsapp',
                'to' => $recipientNumber,
                'type' => 'document',
                'document' => [
                    'id' => $mediaId,
                    'caption' => $projectdescription,
                    'filename' => basename($filePath),
                ],
            ]);
        } else {
            $sendResponse = Http::withToken($token)->post("https://graph.facebook.com/v18.0/{$phone_number_id}/messages", [
                'messaging_product' => 'whatsapp',
                'to' => $recipientNumber,
                'type' => 'text',
                'text' => [
                    'body' => $projectdescription,
                ],
            ]);
        }

        // ✅ Optional: log send response
        Log::info('WhatsApp message response:', $sendResponse->json());

        return redirect()->back()->with('success', 'Message sent successfully!');
    }
}
