;+
; 
;             NAME : mk_sumer_dbase_ff
; 
;          PURPOSE : To assemble a list of available sumer flat field
;                    files
;
; CALLING SEQUENCE : dbase = mk_sumer_dbase_ff()
; 
;           INPUTS : None.
; 
;  OPTIONAL INPUTS : None.
; 
;         KEYWORDS : verbose - generate a listing of available files
; 
;          OUTPUTS : A structure containing information on the
;                    available flat field files.
;
; OPTIONAL OUTPUTS : err - returns error messages, if any
;
;    COMMON BLOCKS : None
; 
;          EXAMPLE : 
;
;    IDL> db=mk_sumer_dbase_ff(/verbose)
;    % MK_SUMER_DBASE_FF: 32 Flat field images found.
;    % MK_SUMER_DBASE_FF: Constructing database of flat field images . . . 
;                    FILE NAME                FILE TIME       DETECTOR
;      sumff_960131_213144.fts      31-JAN-96  21:31:44              A
;      sumff_960202_004227.fts       2-FEB-96  00:42:27              A
;      sumff_960213_002157.fts      13-FEB-96  00:21:57              A
;      sumff_960221_020036.fts      21-FEB-96  02:00:36              A
;      sumff_960228_142057.fts      28-FEB-96  14:20:57              A
;      sumff_960406_203811.fts       6-APR-96  20:38:11              A
;      sumff_960407_050743.fts       7-APR-96  05:07:43              A
;      sumff_960409_103722.fts       9-APR-96  10:37:22              A
;      sumff_960515_042304.fts      15-MAY-96  04:23:04              A
;      sumff_960724_081413.fts      24-JUL-96  08:14:13              A
;      sumff_960725_030512.fts      25-JUL-96  03:05:12              A
;      sumff_960911_162034.fts      11-SEP-96  16:20:34              A
;      sumff_960923_143205.fts      23-SEP-96  14:32:05              A
;      sumff_960924_023126.fts      24-SEP-96  02:31:26              B
;      sumff_961021_233806.fts      21-OCT-96  23:38:06              B
;      sumff_961218_173204.fts      18-DEC-96  17:32:04              B
;      sumff_970126_235413.fts      26-JAN-97  23:54:13              B
;      sumff_970227_041442.fts      27-FEB-97  04:14:42              B
;      sumff_970322_002905.fts      22-MAR-97  00:29:05              B
;      sumff_970424_145906.fts      24-APR-97  14:59:06              B
;     sumff_970610_072306.fits      10-JUN-97  07:23:06              B
;      sumff_970610_072306.fts      10-JUN-97  07:23:06              B
;      sumff_970812_210207.fts      12-AUG-97  21:02:07              B
;     sumff_980219_113316.fits      19-FEB-98  11:33:16              B
;      sumff_980219_113316.fts      19-FEB-98  11:33:16              B
;     sumff_980227_015534.fits      27-FEB-98  01:55:34              A
;      sumff_980227_015534.fts      27-FEB-98  01:55:34              A
;     sumff_980616_034600.fits      16-JUN-98  03:46:00              B
;      sumff_980616_034600.fts      16-JUN-98  03:46:00              B
;     sumff_981107_010010.fits       7-NOV-98  01:00:10              B
;     sumff_990311_000204.fits      11-MAR-99  00:02:04              A
;     sumff_990318_090210.fits      18-MAR-99  09:02:10              B
;    
;    IDL> help,/str,db
;    ** Structure <1f1f598>, 4 tags, length=28, refs=1:
;       FILENAME        STRING    'sumff_970610_072306.fts
;       TIME            STRING    '10-JUN-97  07:23:06'
;      DDAY79          LONG              6736
;       DETECTOR        STRING    'B'
;
;    SPECIAL CALLS : None
;
;          History : Written by HPW
;
;    HPW 31-MAR-99 : Modified to find only .fts and .fits files
;
;    HPW 16-AUG-99 : Modified to look in the directory defined by
;                    $SUMER_DBASE. Added header. Added utim tag.
;
;-

function mk_sumer_dbase_ff,verbose=verbose,err=err

;; ----------------------------------------------------------------------
;; Find flat field files
;; ----------------------------------------------------------------------

;; check if flatfield files are online in SOHO-ARCHIVE (Zarro, Dec'98)

nfiles=0
if have_proc('get_sumer_files') then begin
 files=call_function('get_sumer_files',/flat,/all,count=nfiles,/check)
 if nfiles gt 0 then $
  message,'located SUMER flatfield files in SOHO-ARCHIVE',/cont
endif

;; otherwise check in SUMER_FLATFIELD

if nfiles eq 0 then begin

  ;; check environment variables
  SUMER_FLATFIELD = getenv("SUMER_FLATFIELD")
  if SUMER_FLATFIELD eq '' then begin
    SUMER_FLATFIELD = getenv("SUMER_DBASE")    
    if SUMER_FLATFIELD eq '' then begin
      err="The SUMER_FLATFIELD environment variable must be defined."
      message,err,/cont
      return,''
    endif
  endif
  
  ;; find flat field data files

  ;; find only fits and fts files - HPW 31-MAR-99
  path   = concat_dir(SUMER_FLATFIELD,"sumff*.fits*")
  f_fits = findfile(path,count=c_fits)
  path   = concat_dir(SUMER_FLATFIELD,"sumff*.fts*")
  f_fts  = findfile(path,count=c_fts)
  files  = [f_fits,f_fts]
  exist  = file_exist(files)
  match  = where(exist eq 1,nexist)
  
  if nexist(0) eq 0 then begin
    err="No flat field images found."
    message,err,/cont
    message,"SUMER_FLATFIELD = "+SUMER_FLATFIELD,/cont
    return,''
  endif else begin
    files  = files(match)
    files  = files(sort(files))
    nfiles = n_elements(files) 
  endelse
  print,files

endif

;; ----------------------------------------------------------------------
;; Read files
;; ----------------------------------------------------------------------

struct = {filename: '',$
          time:     '',$
          dday79:   0l,$
          detector: '',$
          utime:   0.0}

ffdb   = replicate(struct,nfiles)

if keyword_set(VERBOSE) then begin
  message,trim(nfiles)+" Flat field images found.",/INFORMATIONAL
  message,"Constructing database of flat field images . . . ",/INFORMATIONAL
endif

for n=0,nfiles-1 do begin
  rd_sumer,files(n),index,/nodata
  time_ex = filename2time(files(n))

  ffdb(n).filename = files(n)
  ffdb(n).time     = fmt_tim(time_ex)
  ffdb(n).dday79   = anytim2dd79(time_ex)
  ffdb(n).detector = sgt_detector(index,/text)
  ffdb(n).utime    = anytim(time_ex)

  if keyword_set(VERBOSE) then begin
    fn  = str_replace(files(n),"\","/")
    fn  = str_sep(fn,"/")
    fmt = '(2a25,a15)'
    if n eq 0 then print,format=fmt,"FILE NAME","FILE TIME","DETECTOR"
    print,format=fmt,fn(n_elements(fn)-1),$
        ffdb(n).time,ffdb(n).detector
  endif

endfor

return,ffdb
end
