package main

import (
	"flag"
	"fmt"
	"os"
	"regexp"
	"strings"
)

type Verbosity int

const (
	Info Verbosity = iota
	Warning
	Error
	Debug
)

func debugOut(level Verbosity, text string) {
	switch level {
	case Info:
		if verbose {
			fmt.Println("[INFO] " + text)
		} else {
			fmt.Println(text)
		}
	case Warning:
		if verbose {
			fmt.Println("[WARNING] " + text)
		}
	case Error:
		fmt.Println("[ERROR] " + text)
		os.Exit(1)
	case Debug:
		if verbose {
			fmt.Println("[DEBUG] " + text)
		}
	}
}

func CheckValidIP(ip string) {
	re := regexp.MustCompile(`^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$`)
	if !re.MatchString(ip) {
		debugOut(Error, "Please enter a valid IP address")
	}
}

func parseFlags() {
	_ip := flag.String("ip", "", "IP address to lookup")
	_props := flag.String("p", "country", "Properties to retrieve")
	_verbose := flag.Bool("v", false, "Verbose output")
	flag.Parse()
	_loose := flag.Args()

	if *_verbose {
		verbose = true
	}
	if *_ip == "" {
		if len(_loose) == 0 {
			debugOut(Error, "Please enter an IP address or use -h for help")
		} else {
			ip = _loose[0]
		}
	} else {
		ip = *_ip
	}
	if _props != nil {
		properties = strings.Split(*_props, ",")
	}
}
