<?php

namespace App\Http\Controllers;

use App\Models\Admin\Estacion;
use App\Models\Bank;
use App\Models\City;
use App\Models\Ciudad;
use App\Models\Departamento;
use App\Models\MetodosPagos;
use App\Models\Servicio;
use App\Models\Speciality;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class ListController extends Controller
{
    /**
     * Devuelve departamentos para selectores administrativos sin cargar
     * relaciones ni columnas innecesarias.
     */
    public function departamentos()
    {
        return Departamento::query()
            ->select([
                'id',
                'nombre',
            ])
            ->orderBy('nombre')
            ->get();
    }

    public function cities()
    {
        return Ciudad::query()
            ->from('ciudades as c')
            ->join('departamentos as d', 'd.id', 'c.departamento_id')
            ->select(
                'c.id',
                'c.nombre as name', //parche por si usa otro lado
                'c.nombre as ciudad',
                'c.latitud',
                'c.longitud',
                'c.departamento_id',
                'd.nombre as departamento'
            )
            ->orderBy('id', 'asc')
            ->get();
    }

    public function estaciones()
    {
        $ciudades = Ciudad::query()
            ->from('ciudades as c')
            ->join('departamentos as d', 'd.id', 'c.departamento_id')
            ->join('estaciones as e', 'e.ciudad_id', 'c.id')
            ->select(
                'c.id',
                'c.nombre as ciudad',
                'c.latitud',
                'c.longitud',
                'c.departamento_id',
                'd.nombre as departamento',
                DB::raw('concat(c.nombre, " - ",d.nombre) as ciudad_departamento')
            )
            ->orderBy('id', 'asc')
            ->groupBy('c.id')
            ->get()
            ->each(function ($data) {
                $data['estaciones'] = Estacion::where('ciudad_id', $data->id)
                    ->where('estado', true)
                    ->get();
            });
        return $ciudades;

        return Estacion::from('estaciones as e')
            ->join('ciudades as c', 'c.id', 'e.ciudad_id')
            ->select(
                'e.id',
                'e.titulo',
                'e.direccion',
                'e.ubicacion',
                'e.slug',
                'e.estado',
                'e.ciudad_id',
                'c.nombre as ciudad_titulo'
            )->get();
    }

    public function servicios()
    {
        return Servicio::query()->get();
    }

    public function metodosPagos()
    {
        return MetodosPagos::query()->get();
    }

    public function banks()
    {
        $selectedId = request('selected_id');

        return Bank::query()
            ->select([
                'id',
                'name',
                'slug',
                'is_active',
                'order_no',
            ])
            ->where(function ($query) use ($selectedId) {
                $query->where('is_active', true);

                if ($selectedId) {
                    $query->orWhere('id', $selectedId);
                }
            })
            ->orderByRaw('ISNULL(order_no)')
            ->orderBy('order_no')
            ->orderBy('name')
            ->get();
    }
}
