#!/bin/sh  
# \
exec /net/epics-ops/web_roots/ops/ActiveTcl-8.6.6/bin/tclsh "$0" "$@"

set auto_path [linsert $auto_path 0  /usr/local/oag/apps/lib/$env(HOST_ARCH)]
set auto_path [linsert $auto_path 0 /usr/local/oag/lib_patch/$env(HOST_ARCH)]

package require sdds

proc CheckoutAndBuildAPSU {args} {
    global env
    set env(CVSROOT) /net/phoebus/srwebmgr/cvsroot
    exec rm -rf /tmp/APSUDocuments
    exec mkdir /tmp/APSUDocuments
    cd /tmp/APSUDocuments

    if {[catch {exec cvs -Q checkout -P APS-U} results]} {
        puts stderr "error: $results"
        exit
    }

    set primaryFileList [exec sdds2stream /tmp/APSUDocuments/APS-U/ICMS.sdds -col=primaryFile]
    foreach primaryFile $primaryFileList {
        set primaryFile /tmp/APSUDocuments/APS-U/$primaryFile
        cd [file dirname $primaryFile]
        catch {exec make -ks [file tail $primaryFile]}
    }

}

proc UploadToAPSUtoICMS {args} {
    set icmsUsername aopsoap
    set icmsPassword \$And56reW
    set dDocAuthor aopsoap
    set xDivision ASD
    set xGroup APH
    cd /tmp/APSUDocuments
    
    set dDocTitleList [exec sdds2stream /tmp/APSUDocuments/APS-U/ICMS.sdds -col=dDocTitle]
    set xDocAuthorList [exec sdds2stream /tmp/APSUDocuments/APS-U/ICMS.sdds -col=xDocAuthor]
    set primaryFileList [exec sdds2stream /tmp/APSUDocuments/APS-U/ICMS.sdds -col=primaryFile]
    set dDocNameList [exec sdds2stream /tmp/APSUDocuments/APS-U/ICMS.sdds -col=dDocName]
    set dDocTypeList [exec sdds2stream /tmp/APSUDocuments/APS-U/ICMS.sdds -col=dDocType]
    set xProjectList [exec sdds2stream /tmp/APSUDocuments/APS-U/ICMS.sdds -col=xProject]
    
    set ICMSFileUpdated 0
    set row -1
    foreach dDocTitle $dDocTitleList \
      xDocAuthor $xDocAuthorList \
      primaryFile $primaryFileList \
      dDocName $dDocNameList \
      dDocType $dDocTypeList \
      xProject $xProjectList {
          if {[llength $dDocType] == 0} {
              set dDocType Specification
          }
          incr row
          set primaryFile /tmp/APSUDocuments/APS-U/$primaryFile
          
          if {[llength $dDocName]} {
              if {[catch {APSICMSQueryRevisionNumber \
                            -icmsUsername $icmsUsername \
                            -icmsPassword $icmsPassword \
                            -dDocName $dDocName} dRevLabel]} {
                  puts stderr "UploadToAPSUtoICMS: Error for $dDocTitle: $dRevLabel"
                  continue
              }
          } else {
              if {[catch {APSICMSQueryDocNameAndRevision \
                            -icmsUsername $icmsUsername \
                            -icmsPassword $icmsPassword \
                            -dDocTitle $dDocTitle \
                            -dDocType $dDocType \
                            -xDivision $xDivision} docNameAndRevision]} {
                  if {[catch {APSSubmitFileToICMS \
                                -dDocTitle $dDocTitle \
                                -dDocType $dDocType \
                                -icmsUsername $icmsUsername \
                                -icmsPassword $icmsPassword \
                                -dDocAuthor $dDocAuthor \
                                -primaryFile $primaryFile \
                                -xDocAuthor $xDocAuthor \
                                -xGroup $xGroup \
                                -xProject $xProject} results]} {
                      puts stderr "UploadToAPSUtoICMS: Error for $dDocTitle: $results"
                  }
                  continue
              }
              set dDocName [lindex $docNameAndRevision 0]
              set dRevLabel [lindex $docNameAndRevision 1]

              sdds load /tmp/APSUDocuments/APS-U/ICMS.sdds data
              set docNameList [lindex $data(Column.dDocName) 0]
              set docNameList [lreplace $docNameList $row $row $dDocName]
              set data(Column.dDocName) [list $docNameList]
              sdds save /tmp/APSUDocuments/APS-U/ICMS.sdds data
              set ICMSFileUpdated 1

          }
          if {[catch {APSICMSQueryVaultFileSize \
                        -icmsUsername $icmsUsername \
                        -icmsPassword $icmsPassword \
                        -dDocName $dDocName \
                        -dRevLabel $dRevLabel} results]} {
              puts stderr "UploadToAPSUtoICMS: Error for $dDocTitle: $results"
              continue
          }
          if {[expr abs ($results - [file size $primaryFile])] >= 20} {
              incr dRevLabel
              if {[catch {APSSubmitFileToICMS \
                            -dDocName $dDocName \
                            -dRevLabel $dRevLabel \
                            -dDocTitle $dDocTitle \
                            -dDocType $dDocType \
                            -icmsUsername $icmsUsername \
                            -icmsPassword $icmsPassword \
                            -dDocAuthor $dDocAuthor \
                            -primaryFile $primaryFile \
                            -xDocAuthor $xDocAuthor \
                            -xGroup $xGroup \
                            -xProject $xProject} results]} {
                  puts stderr "UploadToAPSUtoICMS: Error for $dDocTitle: $results"
              }
              continue
          }
          if {[catch {APSICMSDocInfoToSDDS \
                        -icmsUsername $icmsUsername \
                        -icmsPassword $icmsPassword \
                        -dDocName $dDocName \
                        -dRevLabel $dRevLabel \
                        -fileName /tmp/APSUDocuments/temp.sdds} results]} {
              puts stderr "UploadToAPSUtoICMS: Error for $dDocTitle: $results"
              continue
          }
          set updateDoc 0
          set authors [exec sdds2stream \
                         -noquotes \
                         /tmp/APSUDocuments/temp.sdds \
                         -col=xDocAuthor]
          if {$xDocAuthor != $authors} {
              set updateDoc 1
              exec sddsconvert \
                /tmp/APSUDocuments/temp.sdds \
                -delete=column,xDocAuthor \
                -nowarn
              exec sddsxref \
                /tmp/APSUDocuments/temp.sdds \
                /tmp/APSUDocuments/APS-U/ICMS.sdds \
                -match=dDocTitle \
                -take=xDocAuthor -nowarn
          }
          set docType [exec sdds2stream \
                         -noquotes \
                         /tmp/APSUDocuments/temp.sdds \
                         -col=dDocType]
          if {$dDocType != $docType} {
              set updateDoc 1
              exec sddsconvert \
                /tmp/APSUDocuments/temp.sdds \
                -delete=column,dDocType \
                -nowarn
              exec sddsxref \
                /tmp/APSUDocuments/temp.sdds \
                /tmp/APSUDocuments/APS-U/ICMS.sdds \
                -match=dDocTitle \
                -take=dDocType -nowarn
          }
          set project [exec sdds2stream \
                         -noquotes \
                         /tmp/APSUDocuments/temp.sdds \
                         -col=xProject]
          if {$xProject != $project} {
              set updateDoc 1
              exec sddsconvert \
                /tmp/APSUDocuments/temp.sdds \
                -delete=column,xProject \
                -nowarn
              exec sddsxref \
                /tmp/APSUDocuments/temp.sdds \
                /tmp/APSUDocuments/APS-U/ICMS.sdds \
                -match=dDocTitle \
                -take=xProject -nowarn
          }
          if {$updateDoc} {
              if {[catch {APSICMSUpdateDocInfoFromSDDS \
                            -icmsUsername $icmsUsername \
                            -icmsPassword $icmsPassword \
                            -fileName /tmp/APSUDocuments/temp.sdds} results]} {
                  puts stderr "UploadToAPSUtoICMS: Error for $dDocTitle: $results"
                  continue
              }
          }
      }
    if {$ICMSFileUpdated} {
        cd /tmp/APSUDocuments/APS-U
        exec cvs commit -m "Added new ICMS dDocName values" ICMS.sdds
    }
}


proc CleanUpFiles {args} {
    cd /tmp
    exec rm -rf /tmp/APSUDocuments
}

CheckoutAndBuildAPSU
UploadToAPSUtoICMS
CleanUpFiles

