-- Location: supabase/migrations/20251031165808_enhance_taxi_directory.sql
-- Schema Analysis: Existing taxis table with district column, needs shift column and terminology update
-- Integration Type: PARTIAL_EXISTS - Extending existing taxi module
-- Dependencies: Existing taxis and favorite_taxis tables

-- 1. Create shift enum type for taxi shifts
CREATE TYPE public.taxi_shift AS ENUM ('day', 'evening', 'night');

-- 2. Add shift column to existing taxis table
ALTER TABLE public.taxis 
ADD COLUMN shift public.taxi_shift DEFAULT 'day'::public.taxi_shift;

-- 3. Rename district column to corregimiento for terminology consistency
ALTER TABLE public.taxis 
RENAME COLUMN district TO corregimiento;

-- 4. Update existing indexes to match new column names
DROP INDEX IF EXISTS idx_taxis_district;
CREATE INDEX idx_taxis_corregimiento ON public.taxis(corregimiento);
CREATE INDEX idx_taxis_shift ON public.taxis(shift);

-- 5. Add updated sample data with new structure
DO $$
DECLARE
    taxi1_id UUID := gen_random_uuid();
    taxi2_id UUID := gen_random_uuid();
    taxi3_id UUID := gen_random_uuid();
    taxi4_id UUID := gen_random_uuid();
    taxi5_id UUID := gen_random_uuid();
    taxi6_id UUID := gen_random_uuid();
BEGIN
    -- Remove existing sample data first
    DELETE FROM public.taxis WHERE phone IN ('+507 720-1234', '+507 775-5678');
    
    -- Insert comprehensive sample data with corregimiento and shift
    INSERT INTO public.taxis (id, name, phone, corregimiento, shift, is_active, created_at, updated_at) VALUES
        (taxi1_id, 'Taxi Central Boquete', '+507 720-1234', 'Boquete', 'day'::public.taxi_shift, true, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
        (taxi2_id, 'Taxi Flores David', '+507 775-5678', 'David', 'evening'::public.taxi_shift, true, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
        (taxi3_id, 'Taxi Noctuno David', '+507 776-9999', 'David', 'night'::public.taxi_shift, true, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
        (taxi4_id, 'Taxi Diurno Chiriquí', '+507 721-4567', 'Chiriquí', 'day'::public.taxi_shift, true, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
        (taxi5_id, 'Taxi Tarde Boquete', '+507 722-8890', 'Boquete', 'evening'::public.taxi_shift, true, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
        (taxi6_id, 'Taxi Madrugada Chiriquí', '+507 723-1122', 'Chiriquí', 'night'::public.taxi_shift, true, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);

EXCEPTION
    WHEN unique_violation THEN
        RAISE NOTICE 'Some taxi data already exists, skipping duplicates';
    WHEN OTHERS THEN
        RAISE NOTICE 'Error inserting taxi data: %', SQLERRM;
END $$;

-- 6. Create helper function for getting distinct corregimientos
CREATE OR REPLACE FUNCTION public.get_distinct_corregimientos()
RETURNS TABLE(corregimiento TEXT)
LANGUAGE sql
STABLE
SECURITY DEFINER
AS $$
    SELECT DISTINCT t.corregimiento::TEXT
    FROM public.taxis t
    WHERE t.is_active = true
    ORDER BY t.corregimiento::TEXT;
$$;

-- 7. Create helper function for filtering taxis by corregimiento and shift
CREATE OR REPLACE FUNCTION public.filter_taxis_by_criteria(
    selected_corregimiento TEXT DEFAULT NULL,
    selected_shift TEXT DEFAULT NULL
)
RETURNS TABLE(
    id UUID,
    name TEXT,
    phone TEXT,
    corregimiento TEXT,
    shift TEXT,
    is_active BOOLEAN,
    created_at TIMESTAMPTZ,
    updated_at TIMESTAMPTZ
)
LANGUAGE sql
STABLE
SECURITY DEFINER
AS $$
    SELECT 
        t.id,
        t.name,
        t.phone,
        t.corregimiento::TEXT,
        t.shift::TEXT,
        t.is_active,
        t.created_at,
        t.updated_at
    FROM public.taxis t
    WHERE t.is_active = true
      AND (selected_corregimiento IS NULL OR t.corregimiento = selected_corregimiento)
      AND (selected_shift IS NULL OR t.shift::TEXT = selected_shift)
    ORDER BY t.name ASC;
$$;