# Description: add parsing for some extra server numerics like /stats, /lusers, and /trace

package require roxirc 2.0

procs raw_200 raw_204 raw_205 raw_211 raw_212 raw_213 raw_214 raw_215 raw_219 \
      raw_242 raw_243 raw_249 raw_250 raw_251 raw_252 raw_253 raw_254 raw_255 \
      raw_256 raw_257 raw_258 raw_259 raw_262 raw_263 raw_265 raw_266 raw_351

proc raw_200 {header line} {
    global last trace
    if {$last != "200"} {
        set trace 1
        Echo .0 "\[ trace \] Tracing to [lindex $header 5]" {trace default}
    } else {
        incr trace
    }
    Echo .0 "\[ trace \] [lindex $header 3]: $line [lindex $header 4] [lindex $header end] $line" {trace default}
}

proc raw_204 {header line} {
    Echo .0 "\[ trace \]  [lindex $header 3]: [lindex $header 5] [lindex $header 6]" {trace default}
}

proc raw_205 {header line} {
    global last
    if {$last == "200"} {
        if {[llength $header] == 5} {
            Echo .0 "\[ trace \] [lindex $header 3]: $line [lindex $header 4]" {trace default}
        } else {
            Echo .0 "\[ trace \] [lindex $header 3]: [lindex $header 5] [lindex $header 6] [lindex $header end] $line" {trace default}
        }
    } else {
        Echo .0 "\[ trace \] [lindex $header 3]: $line [lrange $header 4 end]" {trace default}
    }
}

proc raw_211 {header line} {
    Echo .0 "\[ stats \] [join [lrange $header 3 end]]" {stats default}
}

proc raw_212 {header line} {
    Echo .0 "\[ stats \] [join [lrange $header 3 end]] $line" {stats default}
}

proc raw_213 {header line} {
    Echo .0 "\[ stats \] [lrange $header 3 end]" {stats default}
}

proc raw_214 {header line} {
    Echo .0 "\[ stats \] [lrange $header 3 end]" {stats default}
}

proc raw_215 {header line} {
    Echo .0 "\[ stats \] [lrange $header 3 end]" {stats default}
}

proc raw_219 {header line} {
    Echo .0 "\[ stats \] $line" {stats default}
}

proc raw_242 {header line} {
    Echo .0 "\[ stats \] $line" {stats default}
}

proc raw_243 {header line} {
    Echo .0 "\[ stats \] [lrange $line 3 end]" {stats default}
}

proc raw_249 {header line} {
    Echo .0 "\[ stats \] $line" {stats default}
}

proc raw_250 {header line} {
    global last
    if {$last == "242"} {
        Echo .0 "\[ stats \] $line" {stats default}
    } else {
        Echo .0 "\[ lusers \] $line" {lusers default}
    }
}

proc raw_251 {header line} {
    Echo .0 "\[ lusers \] $line" {lusers default}
}

proc raw_252 {header line} {
    Echo .0 "\[ lusers \] [lindex $header end] $line" {lusers default}
}

proc raw_253 {header line} {
    Echo .0 "\[ lusers \] [lindex $header end] $line" {lusers default}
}

proc raw_254 {header line} {
    Echo .0 "\[ lusers \] [lindex $header end] $line" {lusers default}
}

proc raw_255 {header line} {
    Echo .0 "\[ lusers \] $line" {lusers default}
}

proc raw_256 {header line} {
    Echo .0 "\[ admin \] $line" {admin default}
}

proc raw_257 {header line} {
    Echo .0 "\[ admin \] $line" {admin default}
}

proc raw_258 {header line} {
    Echo .0 "\[ admin \] $line" {admin default}
}

proc raw_259 {header line} {
    Echo .0 "\[ admin \] $line" {admin default}
}

proc raw_262 {header line} {
    global trace
    if [info exists trace] {
        Echo .0 "\[ trace \] End of trace to [lindex $header end], $trace hops" {trace default}
        unset trace
    } else {
        Echo .0 "\[ trace \] End of trace to [lindex $header end], 0 hops" {trace default}
    }
}

proc raw_263 {header line} {
    Echo .0 "\[ server \] $line" {server default}
}

proc raw_265 {header line} {
    Echo .0 "\[ users \] $line" {users default}
}

proc raw_266 {header line} {
    Echo .0 "\[ users \] $line" {users default}
}

proc raw_351 {header line} {
    Echo .0 "\[ version \] [lrange $header 3 end] $line" {version default}
}

proc unload {} {}

proc help {window line} {
    Echo $window "\[ help \] Adds parsing for the following numeric replies: [string map "[namespace current]::raw_ {}" [info commands [namespace current]::raw_*]]" {help default}
}

#foreach x [info commands [namespace current]::raw_*] {
#    eval {proc $x [info args $x] "puts \"header: \$header\nline: \$line\n\"\n[info body $x]"}
#}

