<?php

namespace App\Http\Controllers;

use App\Models\Aderente;
use App\Models\Post;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
class AderenteController extends Controller
{
  public function store(Request $request)
{
    $request->validate([
        'post_id' => 'nullable|integer',
        'paragem' => 'nullable|string',
        'paragem_lat' => 'nullable|numeric',
        'paragem_long' => 'nullable|numeric',
        'preco_proposto' => 'nullable|numeric',
        'motoristaId'=> 'nullable|numeric',
    ]);

    $clienteId = Auth::id();
    $post = null;
    $postId = null;

    // 🔍 Se veio motoristaId → busca a corrida ativa dele
    if ($request->filled('motoristaId')) {
        $post = Post::where('user_id', $request->motoristaId)
            ->where('status', 1) // ativo
            ->first();

        if (!$post) {
            return response()->json([
                'success' => false,
                'message' => 'O motorista não tem corrida ativa.',
            ], 404);
        }

        $postId = $post->id;
    } else {
        // Caso contrário, post_id torna-se obrigatório
        if (!$request->filled('post_id')) {
            return response()->json([
                'success' => false,
                'message' => 'O campo post_id é obrigatório quando motoristaId não é informado.',
            ], 422);
        }

        $postId = $request->input('post_id');
        $post = Post::findOrFail($postId);
    }

    // 🔍 Verifica se o post está ativo
    if ($post->status != 1) {
        return response()->json([
            'success' => false,
            'message' => 'Esta boleya já foi encerrada.',
        ], 409);
    }

    // 🔍 Verifica se já existe aderência pendente
    $aderentePendente = Aderente::where('cliente_id', $clienteId)
        ->where('post_id', $postId)
        ->where('status', Aderente::STATUS_PENDENTE)
        ->first();

    if ($aderentePendente) {
        return response()->json([
            'success' => false,
            'message' => 'Já aderiste a esta boleya. Aguarda aprovação.',
        ], 409);
    }

    // 🔍 Comparar preços
    $precoProposto = $request->input('preco_proposto');
    $preco_status_lance = 0;

    if ($precoProposto > 0) {
        if ($precoProposto == $post->preco) {
            $preco_status_lance = 0;
        } else {
            $preco_status_lance = 1;
        }

        if ($precoProposto > $post->preco) {
            return response()->json([
                'success' => false,
                'message' => 'O preço proposto não pode ser maior que o preço da boleya.',
            ], 409);
        }
    }

    // 🔄 Cria novo aderente
    $aderente = Aderente::create([
        'cliente_id' => $clienteId,
        'post_id' => $postId,
        'lance' => $precoProposto,
        'lance_yes_no' => $preco_status_lance,
        'paragem' => $request->input('paragem'),
        'status' => Aderente::STATUS_PENDENTE,
        'paragem_lat' => $request->input('paragem_lat'),
        'paragem_long' => $request->input('paragem_long'),
        'notificado_motorista' => false,
        'notificado_aderente' => false,
    ]);

    return response()->json([
        'success' => true,
        'message' => 'Pedido de boleya efectuado.',
    ]);
}



    public function listarPorPost($postId)
    {
        return Aderente::where('post_id', $postId)
            ->whereIn('status', [Aderente::STATUS_PENDENTE, Aderente::STATUS_ACEITO])
            ->with('user')
            ->get();
    }

    public function cancel(Request $request)
{
    $request->validate([
        'post_id' => 'required|integer',
    ]);

    $clienteId = Auth::id();
    $motoristaId = $request->post_id; // 🚨 aqui vem motorista_id, não post_id
    
    // 🔍 Busca o post ativo desse motorista
    $post = Post::where('user_id', $motoristaId)
        ->where('status', 1)
        ->first();

    if (! $post) {
        return response()->json([
            'success' => false,
            'message' => 'O motorista não tem boleya ativa.'
        ], 404);
    }

    // 🔍 Busca todos os pedidos do cliente para esse post
    $aderentes = Aderente::where('cliente_id', $clienteId)
        ->where('post_id', $post->id)
        ->orderByDesc('id')
        ->get();

    if ($aderentes->isEmpty()) {
        return response()->json([
            'success' => false,
            'message' => 'Nenhum pedido encontrado para esta boleya.'
        ], 404);
    }

    // 🔍 Encontra o primeiro aderente válido
    $aderente = $aderentes->firstWhere(function ($a) {
        return $a->status != Aderente::STATUS_REJEITADO;
    });

    if (! $aderente) {
        return response()->json([
            'success' => false,
            'message' => 'Todos os pedidos já foram cancelados.'
        ], 409);
    }

    // 🔄 Marca como rejeitado / cancelado
    $aderente->status = Aderente::STATUS_REJEITADO;
    $aderente->save();

    return response()->json([
        'success' => true,
        'message' => 'Boleya cancelada.'
    ]);
}


public function atualizarStatusPassageiro(Request $request)
{
    // Validação dos dados recebidos
    $validator = Validator::make($request->all(), [
        'uid' => 'required|string',
        'status' => 'required|integer|in:1,2',
    ]);

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

    $uid = $request->input('uid');
    $status = $request->input('status');

    // Busca o passageiro na tabela Aderente com status 0 (pendente)
    $aderente = Aderente::where('cliente_id', $uid)
        ->where('status', 0)
        ->first();

    if (!$aderente) {
        return response()->json([
            'success' => false,
            'message' => 'Passageiro não encontrado',
        ], 404);
    }

    // Atualiza o status do passageiro
    $aderente->status = $status;
    $aderente->save();

}
    
}
