#!/bin/sh  
# \
exec oagtclsh "$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)]

APSStandardSetup

set args $argv
set configFile ""
set verbose 0
set usage "create_pv_group -configFile <filename> \[-verbose 1]"
if {[APSStrictParseArguments {configFile verbose}] || ![string length $configFile]} {
    puts stderr "$usage"
    exit 1
}
   
if ![file exist $configFile] {
    puts stderr "Error: $configFile does not exist!"
    exit 1
}

set pages [exec sdds2stream -npages=bare $configFile]
if $pages>1 {
    set files [glob -nocomplain ${configFile}??.sdds]
    if [llength $files] {
	eval file delete -force $files
       }
    set tmpRoot [APSTmpString]
    exec sddssplit $configFile -rootname=/tmp/$tmpRoot-[file tail $configFile] -digits=2
    set files [lsort [glob /tmp/$tmpRoot-[file tail ${configFile}]??.sdds]]
} else {
    set files $configFile
}

set GroupUpdatePeriod 1
set NCAWorkers 10
set runTime 0
set pvList ""
foreach file $files {
    set pars [exec sddsquery -par $file]
    set pv [exec sdds2stream -par=ControlName $file]
    if [lsearch -exact $pars "NCAWorkers"]>=0 {
	set NCAWorkers [exec sdds2stream -par=NCAWorkers $file]
    }
    if [lsearch -exact $pars "GroupUpdatePeriod"]>=0 {
	set GroupUpdatePeriod [exec sdds2stream -par=GroupUpdatePeriod $file]
    }
    if [lsearch -exact $pars "RunTime"]>=0 {
	set runTime [exec sdds2stream -par=RunTime $file]
    }
    set needToCreate 0
    if {[catch {exec daq-pv-group status --group-channel $pv} result] || [string match {*[Ee]xception*} result]} {
        set needToCreate 1
    }
    if $needToCreate {
        if $verbose {
            puts "creating $pv..."
            flush stdout
        }
        exec daq-pv-group create --input-sdds-file $file --group-channel $pv \
            --runtime $runTime --group-update-period $GroupUpdatePeriod &
    } else {
        if $verbose {
            puts "Not creating $pv. Already present."
            flush stdout
        }
    }
    lappend pvList $pv
}
if $verbose {
    puts "done."
}
exit 0
