;+
; PROJECT
;           SOLARB EIS
;
; NAME
;           EIS_READ_ORBIT_EVENTS
;
; PURPOSE
;           This function reads orbit events provided by the CO. It
;           includes entries and exits of SAAs, HLAs and day & night
;
; OUTPUTS
;           An array of pass structures - 1 for each entry in the list
;
; CATEGORY
;           EIS timeline planning
;
; WRITTEN
;           John A Rainne RAL 7-Nov-2006
;
; VERSION
;          v0.1 JAR 18-Apr-2007
;               Added DAY and NGT capability due to imminent demand
;          v0.2 JAR 5-Jun-2008
;               Added keyword num_days
;          v0.3 JAR 13-Jun-2008
;               Added filter at end to elimiate unwanted events
;          v0.4 JAR 18-Nov-2008
;               Sort and filter out unique events
;          v0.5 JAR 5-May-2009
;               Added XTW tags from obev files
;
;
;______________________________________________________________________________
FUNCTION eis_read_orbit_events , start_time , duration , num_days= num_days

IF (N_ELEMENTS(num_days) EQ 0) THEN num_days = 3

disp_start = start_time
disp_stop  = disp_start + (duration * 3600.)
; Get array of datestrings
ds = eis_create_datestring_array(start_time , duration,num_days = num_days)

; Get array of event fileNames - eg;
;/home/sstdljar/jar24/cmdpln/latest/stev_200610080001.evt
;/home/sstdljar/jar24/cmdpln/latest/stev_200610080002.evt
;/home/sstdljar/jar24/cmdpln/latest/stev_200610110001.evt
fileNames = eis_create_jside_filenames(ds,/OBEV)
IF (STRLEN(fileNames[0]) EQ 0) THEN RETURN , 0

all_events = ''

; OK, read each file
FOR i = 0 , N_ELEMENTS(fileNames) - 1 DO BEGIN

    events = eis_read_file_orbit_events(fileNames[i])

    CASE N_TAGS(all_events) OF
        0    : all_events = events
        ELSE : all_events = [all_events , events]
    ENDCASE

ENDFOR

; Filter out only those orbit events within the display period - including
; a 2 hour buffer on either side
buffer = 3600. * 2
valid = WHERE( (all_events[*].stop_time  GE disp_start - buffer)    AND    $
               (all_events[*].start_time LE disp_stop  + buffer)  , count)

CASE count OF
   0    : all_events = 0
   ELSE : all_events = all_events[valid]
ENDCASE

IF (N_TAGS(all_events[0]) EQ 0) THEN RETURN , 0

all_events_sorted = 0

;
; SAA - get SAA events, sort them (start_time) and find unique values
;
saa_index_list      = WHERE(STRLOWCASE(all_events[*].name) EQ 'saa' , count_saa)
IF (count_saa GT 0) THEN BEGIN
   saa_events          = all_events[saa_index_list]
   saa_start_time_list = saa_events[*].start_time
   saa_start_time_sort = BSORT(saa_start_time_list)
   saa_events          = saa_events[saa_start_time_sort]
   saa_start_time_uniq = UNIQ(saa_events.start_time)
   saa_events          = saa_events[saa_start_time_uniq]
   ;print,'SAA - sorted & Unique************************************'
   ;print,transpose(anytim2utc(saa_events.start_time,/stime))
ENDIF

;
; XTW - get XTW events, sort them (start_time) and find unique values
;
xtw_index_list      = WHERE(STRLOWCASE(all_events[*].name) EQ 'xtw' , count_xtw)
IF (count_xtw GT 0) THEN BEGIN
   xtw_events          = all_events[xtw_index_list]
   xtw_start_time_list = xtw_events[*].start_time
   xtw_start_time_sort = BSORT(xtw_start_time_list)
   xtw_events          = xtw_events[xtw_start_time_sort]
   xtw_start_time_uniq = UNIQ(xtw_events.start_time)
   xtw_events          = xtw_events[xtw_start_time_uniq]
   ;print,'XTW - Sorted & Unique************************************'
   ;print,transpose(anytim2utc(xtw_events.start_time,/stime))
ENDIF

;
; NGT - get NGT events, sort them (start_time) and find unique values
;
ngt_index_list      = WHERE(STRLOWCASE(all_events[*].name) EQ 'ngt' , count_ngt)
IF (count_ngt GT 0) THEN BEGIN
   ngt_events          = all_events[ngt_index_list]
   ngt_start_time_list = ngt_events[*].start_time
   ngt_start_time_sort = BSORT(ngt_start_time_list)
   ngt_events          = ngt_events[ngt_start_time_sort]
   ngt_start_time_uniq = UNIQ(ngt_events.start_time)
   ngt_events          = ngt_events[ngt_start_time_uniq]
   ;print,'NGT - Sorted & Unique************************************'
   ;print,transpose(anytim2utc(ngt_events.start_time,/stime))
ENDIF

IF (count_saa GT 0) THEN all_events_sorted = saa_events

IF (count_xtw GT 0) THEN BEGIN
   CASE N_TAGS(all_events_sorted) OF
       0    : all_events_sorted = xtw_events
       ELSE : all_events_sorted = [all_events_sorted , xtw_events]
   ENDCASE
ENDIF
IF (count_ngt GT 0) THEN BEGIN
   CASE N_TAGS(all_events_sorted) OF
       0    : all_events_sorted = ngt_events
       ELSE : all_events_sorted = [all_events_sorted , ngt_events]
   ENDCASE
ENDIF


RETURN , all_events_sorted

END
