<?php

use App\Livewire\Public\Fuel\StationList;
use Livewire\Livewire;

it('renders empty state before any search', function () {
    Livewire::test(StationList::class)
        ->assertStatus(200)
        ->assertSet('hasSearched', false)
        ->assertDontSee('Stations Nearby');
});

it('shows station cards after stations-found event', function () {
    $station = [
        'station_id' => 'abc123',
        'name' => 'BP Garage',
        'brand' => 'BP',
        'is_supermarket' => false,
        'address' => '1 High Street',
        'postcode' => 'SW1A 1AA',
        'lat' => 51.5074,
        'lng' => -0.1278,
        'distance_km' => 1.5,
        'fuel_type' => 'e10',
        'price_pence' => 14390,
        'price' => 143.9,
        'price_updated_at' => '2026-04-05T08:00:00.000Z',
        'price_classification' => 'current',
        'price_classification_label' => 'Current',
    ];
    $meta = ['count' => 1, 'lowest_pence' => 14390, 'avg_pence' => 14390.0];

    Livewire::test(StationList::class)
        ->dispatch('stations-found', results: [$station], meta: $meta, prediction: null, radius: 5)
        ->assertSet('hasSearched', true)
        ->assertSee('Stations Nearby')
        ->assertSee('BP Garage')
        ->assertSee('1 Result');
});

it('shows empty state message when stations-found has no results', function () {
    Livewire::test(StationList::class)
        ->dispatch('stations-found', results: [], meta: ['count' => 0], prediction: null, radius: 5)
        ->assertSet('hasSearched', true)
        ->assertSee('No stations found');
});

it('updates results when stations-found fires again', function () {
    $station = [
        'station_id' => 'abc123',
        'name' => 'BP Garage',
        'brand' => 'BP',
        'is_supermarket' => false,
        'address' => '1 High Street',
        'postcode' => 'SW1A 1AA',
        'lat' => 51.5074,
        'lng' => -0.1278,
        'distance_km' => 1.5,
        'fuel_type' => 'e10',
        'price_pence' => 14390,
        'price' => 143.9,
        'price_updated_at' => '2026-04-05T08:00:00.000Z',
        'price_classification' => 'current',
        'price_classification_label' => 'Current',
    ];

    Livewire::test(StationList::class)
        ->dispatch('stations-found', results: [$station], meta: ['count' => 1], prediction: null, radius: 5)
        ->assertSee('BP Garage')
        ->dispatch('stations-found', results: [], meta: ['count' => 0], prediction: null, radius: 5)
        ->assertDontSee('BP Garage');
});
