; THE PURPOSE OF THIS ROUTINE IS TO RETRIEVE THE FILE NAMES OF IUVS
; FILES FROM EITHER A CERTAIN ORBIT RANGE OR A CERTAIN TIME RANGE.

; KEYWORDS:

; LEVEL: this refers to data level and must be one of the following:
; 'l1b', 'l1c', 'l2', 'l3', or 'ql'

; PRODUCT: this refers to the specific type of data product  within
; the specific level requested. This must be one of the following:
; 'calibration', 'corona', 'disk', 'limb', phobos, centroid, cruise, echelle,
; occultation, transition

;NOTE: for now, this routine only works for l1b, l1c disk and limb files

function mvn_iuv_file_retrieve, trange, level = level, product = product
  
  year_start = floor(secs2yrs(trange [0]))
  year_start_string = time_string (trange [0], Tformat = 'YYYY')
  year_end = floor(secs2yrs(trange [1]))
  year_end_string = time_string (trange [1], Tformat = 'YYYY')
  month_start_string = time_string (trange [0], Tformat = 'MM')
  month_start = floor (float (month_start_string))
  month_end_string = time_string (trange [1], Tformat = 'MM')
  month_end = floor (float (month_end_string))

  path = '/disks/data/maven/data/sci/iuv/'+level+'/'+product+'/'

; figure out how many directories to check
  ndir = 1+12*(year_end - year_start) + month_end_string - month_start_string
  
; npw go through each directory
  year_count = 0
  month_count = 0
  directory_name = strarr(ndir)
  Files = ''
  for K = 0, ndir-1 do begin
     year_string = roundst(year_start + ceil((k + month_start - 12)*1.0/12))
     month_string = numbered_filestring(((month_start + k) mod 12), digits = 2)
     directory_name[k] = path + year_string +'/' + month_string +'/'
; for each directory, grab only the files with time strings inside the
; trange
     these_files = get_file_name_string (directory_name [K], identifier = 'mvn_iuv*.fits.gz')
     nf = n_Elements (these_files)
     for J = 0, nf-1 do begin
        ss = strsplit(these_files[J],'_',/extract); split up the filename
        tst = ss[4]; this is the time part of the filename
        filetime = time_double (tst, Tformat = 'YYYYMMDDThhmmss')
        if filetime gt trange [0] and filetime lt trange [1] then files = $
           [files, directory_name[k]+these_files [j]]
     endfor
  endfor

  if n_elements (files) eq 1 then message, 'No files found that match time range'

  return, files [1:*]
end
  
  
function get_file_name_string,  path,  identifier =  identifier,  $
                                full_name =  full_name, $
                                subdirectory = subdirectory
  if not keyword_set (identifier) then identifier =  ' '
    rmst =  'rm '+'./temp_list_file.txt'
 
  spawn,  rmst
  if not keyword_set (subdirectory) then list_string = 'ls ' +$
     path + identifier + ' > '+ './temp_list_file.txt' else list_string = $
     'ls -R ' +$
     path + identifier + ' > '+ './temp_list_file.txt'
  spawn,  list_string
  openr,  unit, './temp_list_file.txt', /get_lun
  if eof(unit) eq 1 then return,  sqrt (-7.3)
   names = strarr(25000)
  i = 0
  redflag = 0
  
  while redflag eq 0 do begin 
    
    kal = ' '
    readf, unit, kal 
    i = i+1
    if eof(unit) eq 1 then redflag = 1
    print, kal
    print, redflag
    ;names_split =  strsplit (kal, '/', /extract,  count =  count)
   ; if not keyword_set (full_name) then names [i-1] =  $
    ;  names_split [count -1] else 
    names[i-1] = kal
  endwhile
  names = names[0:i-1]
  names = filename_only (names)
; default is to shorten the string to exclude the path
 
    
  close, /all
  rmst =  'rm ' +'./temp_list_file.txt'

  spawn,  rmst
  if keyword_set (full_name) then return,  path + $
    names [0:i -1] else return,  names [0: i -1]
end

function numbered_filestring, i, digits = digits
  if not keyword_set (digits) then digits = 4
  case digits of
      1: return, strcompress(string(i mod 10), /rem)
      2: return,strcompress(string(i/10 mod 10), /rem)+$
    strcompress(string(i mod 10), /rem)
      3: return,strcompress(string((i - 1000*(i/1000))/100), /rem)+$
    strcompress(string(i/10 mod 10), /rem)+$
    strcompress(string(i mod 10), /rem)
      4: return,strcompress(string(i/1000), /rem) +$
    strcompress(string((i - 1000*(i/1000))/100), /rem)+$
    strcompress(string(i/10 mod 10), /rem)+$
    strcompress(string(i mod 10), /rem)
  endcase
end