package thermocouple

import (
	"th7/data/thermocouple"
)

func WithinTemperatureRange(thermo thermocouple.Type, c float64) bool {

	switch thermo {
	case thermocouple.B:
		return c >= B_MIN_C && c <= B_MAX_C
	case thermocouple.E:
		return c >= E_MIN_C && c <= E_MAX_C
	case thermocouple.J:
		return c >= J_MIN_C && c <= J_MAX_C
	case thermocouple.K:
		return c >= K_MIN_C && c <= K_MAX_C
	case thermocouple.N:
		return c >= N_MIN_C && c <= N_MAX_C
	case thermocouple.R:
		return c >= R_MIN_C && c <= R_MAX_C
	case thermocouple.S:
		return c >= S_MIN_C && c <= S_MAX_C
	case thermocouple.T:
		return c >= T_MIN_C && c <= T_MAX_C
	}

	// None type
	return false
}

func C(thermo thermocouple.Type, uv float64) (float64, error) {

	switch thermo {
	case thermocouple.None:
		return 0, thermocouple.ErrThermocoupleNone

	case thermocouple.B:
		return b_uv_to_c(uv)

	case thermocouple.E:
		return e_uv_to_c(uv)

	case thermocouple.J:
		return j_uv_to_c(uv)

	case thermocouple.K:
		return k_uv_to_c(uv)

	case thermocouple.N:
		return n_uv_to_c(uv)

	case thermocouple.R:
		return r_uv_to_c(uv)

	case thermocouple.S:
		return s_uv_to_c(uv)

	case thermocouple.T:
		return t_uv_to_c(uv)
	}

	return 0, thermocouple.ErrUnimplemented
}

func UV(thermo thermocouple.Type, c float64) (float64, error) {

	switch thermo {
	case thermocouple.None:
		return 0, thermocouple.ErrThermocoupleNone

	case thermocouple.B:
		return b_c_to_uv(c)

	case thermocouple.E:
		return e_c_to_uv(c)

	case thermocouple.J:
		return j_c_to_uv(c)

	case thermocouple.K:
		return k_c_to_uv(c)

	case thermocouple.N:
		return n_c_to_uv(c)

	case thermocouple.R:
		return r_c_to_uv(c)

	case thermocouple.S:
		return s_c_to_uv(c)

	case thermocouple.T:
		return t_c_to_uv(c)
	}

	return 0, thermocouple.ErrUnimplemented
}