
ALTER TABLE linea_paradero drop CONSTRAINT IF EXISTS linea_paradero_id_linea_fkey;

-----

ALTER TABLE gtfs_stop_times drop CONSTRAINT IF EXISTS fk_gtfs_sto_reference_gtfs_tri;

-----

ALTER TABLE gtfs_frequencie drop CONSTRAINT IF EXISTS fk_gtfs_fre_reference_gtfs_tri;

-----

DELETE FROM gtfs_calendar;

-----

insert into gtfs_calendar  
select service_id, monday::bool , tuesday::bool , wednesday::bool , thursday::bool ,friday::bool ,saturday::bool ,sunday::bool  
from z_calendar zc;  

-----

update paradero   
set vigente = true, 
stop_name= (select stop_name from z_stops where stop_id=paradero.id_paradero::text limit 1 ), 
stop_desc=(select stop_desc from z_stops where stop_id=paradero.id_paradero::text limit 1 ), 
stop_lat =(select stop_lat from z_stops where stop_id=paradero.id_paradero::text  limit 1)::float(8),   
stop_lon =(select stop_lon from z_stops where stop_id=paradero.id_paradero::text  limit 1)::float(8), 
stop_code=(select stop_code from z_stops where stop_id=paradero.id_paradero::text  limit 1)  
where id_paradero::text in (select stop_id from z_stops ); 

-----

insert into paradero
select 
stop_id, null as id_comuna, null as id_tipo_paradero, true,
stop_code , stop_name , stop_desc , stop_lat::float(8) ,  stop_lon::float(8) , zone_id , 
stop_url , location_type ,
parent_station ,null as stop_time_zone ,  wheelchair_boarding::numeric 
from z_stops zs 
where stop_id not in (select id_paradero::text from paradero);

-----

delete from linea_paradero;

----- 


CREATE TABLE IF NOT EXISTS z_verifica_route (
    route_id text NULL,
    route_short_name text NULL
);


delete from    linea l 
where id_linea in 
(
select route_id||'-0'  from z_verifica_route as v
where coalesce((select count(*) from z_routes as r where r.route_id=v.route_id and r.route_short_name = v.route_short_name),0)=0  
union 
select route_id||'-1'  from z_verifica_route as v
where coalesce((select count(*) from z_routes as r where r.route_id=v.route_id and r.route_short_name = v.route_short_name),0)=0  
union 
select route_id  from z_verifica_route as v
where coalesce((select count(*) from z_routes as r where r.route_id=v.route_id and r.route_short_name = v.route_short_name),0)=0  
) ;

delete from z_verifica_route ;

insert into  z_verifica_route  
select route_id, route_short_name from z_routes ;

----- 

update linea 
set vigente = false
where id_red in  (select id_red from gtfs_archivo where trim(upper(status))='PROCESANDO' )
and id_linea  not in (
    select trim(zr.route_id)||'-'||trim(zt.direction_id::varchar)  
    from z_routes zr  
    inner join z_trips zt on zr.route_id =zt.route_id 
);

----- 

update linea 
set vigente = true
where id_red in  (select id_red from gtfs_archivo where trim(upper(status))='PROCESANDO' )
and id_linea in (
    select trim(zr.route_id)||'-'||trim(zt.direction_id::varchar)  
    from z_routes zr  
    inner join z_trips zt on zr.route_id =zt.route_id 
);

----- 

insert into linea  
select  distinct  
    trim(zr.route_id)||'-'||trim(zt.direction_id::varchar) as route_id, 
    null,--zr.agency_id ,
    substring(zt.trip_headsign FROM '(\S+) -') as route_short_name , 
    zr.route_desc ,
    zr.route_type::numeric ,   
    zr.route_url,
    zr.route_color , 
    zr.route_text_color , 
    zt.trip_headsign as    route_long_name , true ,
     (select id_red from gtfs_archivo where trim(upper(status))='PROCESANDO' limit 1) as id_red
    from z_routes zr  
    inner join z_trips zt 
    	on zr.route_id =zt.route_id 
    	and replace (zt.trip_headsign,' ','') =replace ((SPLIT_PART(route_long_name, '-', 1)||'-'||SPLIT_PART(route_long_name, '-', 2)),' ','')
where route_long_name  not like '%'||route_short_name ||'%'
and (trim(zr.route_id)||'-'||trim(zt.direction_id::varchar) ) not in (select id_linea from linea  )
union  
select distinct 
trim(zr.route_id)||'-'||trim(zt.direction_id::varchar) as route_id, 
    null,--zr.agency_id ,
    substring(zt.trip_headsign FROM '(\S+) -') as route_short_name , 
    zr.route_desc ,
    zr.route_type::numeric ,   
    zr.route_url,
    zr.route_color , 
    zr.route_text_color , 
    zt.trip_headsign as    route_long_name , true ,
     (select id_red from gtfs_archivo where trim(upper(status))='PROCESANDO' limit 1) as id_red
    from z_routes zr  
    inner join z_trips zt 
    	on zr.route_id =zt.route_id 
    	and replace (zt.trip_headsign,' ','') =replace ((SPLIT_PART(route_long_name, '-', 3)||'-'||SPLIT_PART(route_long_name, '-', 4)),' ','')
where route_long_name  not like '%'||route_short_name ||'%'
and (trim(zr.route_id)||'-'||trim(zt.direction_id::varchar) ) not in (select id_linea from linea  )
union  
select  distinct 
	 trim(zr.route_id)||'-'||trim(zt.direction_id::varchar) as route_id, 
    null,--zr.agency_id ,
     route_short_name , 
    zr.route_desc ,
    zr.route_type::numeric ,   
    zr.route_url,
    zr.route_color , 
    zr.route_text_color , 
    zt.trip_headsign as    route_long_name , true ,
     (select id_red from gtfs_archivo where trim(upper(status))='PROCESANDO' limit 1) as id_red
    from z_routes zr  
    inner join z_trips zt 
    	on zr.route_id =zt.route_id 
    	and 
    	( position('-' in zt.trip_headsign) = 0  
    	 or 
    	 route_long_name    like '%'||route_short_name ||'%'
    	)
where (trim(zr.route_id)||'-'||trim(zt.direction_id::varchar) ) not in (select id_linea from linea  )
order by 1;

-----

truncate table gtfs_shape;

-----

insert into gtfs_shape
select shape_id::numeric,shape_pt_lat::float8,shape_pt_lon::float8,
shape_pt_sequence::numeric,shape_dist_traveled::float8
from z_shapes zs;

-----
 
truncate table gtfs_stop_times;

-----

truncate table gtfs_frequencie;

-----

truncate table gtfs_trips;

-----

insert into gtfs_trips 
select 
trip_id,
trim(route_id)||'-'||trim(direction_id::varchar) as route_id,
shape_id::numeric ,null as regreso, trip_headsign,trip_short_name,direction_id::numeric,service_id::varchar,block_id
from z_trips zt;

-----

insert into  gtfs_stop_times  
select stop_id,trip_id,arrival_time,stop_sequence::numeric,stop_headsign,departure_time,drop_off_type::numeric,null as shape_dist_traveled ,
timepoint::numeric , pickup_type::numeric
from z_stop_times zst ;

-----
  
insert into linea_paradero (id_linea ,  id_paradero )
SELECT DISTINCT 
l.id_linea ,  p.id_paradero  
FROM linea l
JOIN gtfs_trips t ON l.id_linea =t.id_linea 
JOIN gtfs_stop_times   st ON t.id_trip = st.id_trip 
JOIN paradero p   ON st.id_paradero  = p.id_paradero;
 
-----

UPDATE paradero
SET stop_name = REGEXP_REPLACE(
    REGEXP_REPLACE(
        stop_name,
        '\yentre\y', 
        '-entre', 
        'gi'
    ),
    '\yesq\y', 
    '-esq', 
    'gi'
);

-----
update paradero 
set id_comuna = (select id_comuna from comuna_georeferencia as c where ST_Contains(c.geom, ST_SetSRID(ST_MakePoint(paradero.stop_lon, paradero.stop_lat), 4326)) limit 1)
where id_comuna is not null;  
-----

insert into dispositivo 
select 'QRCode-'||id_paradero , id_paradero , true, null, 3 
from paradero  as p where id_paradero 
not in (select id_paradero from dispositivo as d where id_tipo_dispositivo=3 and d.id_paradero = p.id_paradero);

-----

ALTER TABLE linea_paradero ADD CONSTRAINT linea_paradero_id_linea_fkey FOREIGN KEY (id_linea) REFERENCES linea(id_linea);

-----

ALTER TABLE gtfs_stop_times ADD CONSTRAINT fk_gtfs_sto_reference_gtfs_tri FOREIGN KEY (id_trip) REFERENCES gtfs_trips(id_trip) ON DELETE RESTRICT ON UPDATE RESTRICT;

-----

ALTER TABLE gtfs_frequencie ADD CONSTRAINT fk_gtfs_fre_reference_gtfs_tri FOREIGN KEY (id_trip) REFERENCES gtfs_trips(id_trip) ON DELETE RESTRICT ON UPDATE RESTRICT;

-----


update paradero p set id_comuna = (
select id_comuna from comuna_georeferencia cg
where st_contains(cg.geom, st_setsrid(st_makepoint(p.stop_lon, p.stop_lat) ,4326))
limit 1)
where id_comuna is null;