package collector

import (
	"bytes"
	"reflect"

	"github.com/prometheus-community/windows_exporter/log"
)

func className(src interface{}) string {
	s := reflect.Indirect(reflect.ValueOf(src))
	t := s.Type()
	if s.Kind() == reflect.Slice {
		t = t.Elem()
	}
	return t.Name()
}

func queryAll(src interface{}) string {
	var b bytes.Buffer
	b.WriteString("SELECT * FROM ")
	b.WriteString(className(src))

	log.Debugf("Generated WMI query %s", b.String())
	return b.String()
}

func queryAllForClass(src interface{}, class string) string {
	var b bytes.Buffer
	b.WriteString("SELECT * FROM ")
	b.WriteString(class)

	log.Debugf("Generated WMI query %s", b.String())
	return b.String()
}

func queryAllWhere(src interface{}, where string) string {
	var b bytes.Buffer
	b.WriteString("SELECT * FROM ")
	b.WriteString(className(src))

	if where != "" {
		b.WriteString(" WHERE ")
		b.WriteString(where)
	}

	log.Debugf("Generated WMI query %s", b.String())
	return b.String()
}

func queryAllForClassWhere(src interface{}, class string, where string) string {
	var b bytes.Buffer
	b.WriteString("SELECT * FROM ")
	b.WriteString(class)

	if where != "" {
		b.WriteString(" WHERE ")
		b.WriteString(where)
	}

	log.Debugf("Generated WMI query %s", b.String())
	return b.String()
}