package travelnetparser

import (
	"errors"
	"fmt"
	"io/ioutil"
	"mapserver/luaparser"
)

type GenericPos struct {
	X int `json:"x"`
	Y int `json:"y"`
	Z int `json:"z"`
}

type Travelnet struct {
	Timestamp int64       `json:"timestamp"`
	Pos       *GenericPos `json:"pos"`
}

func ParseFile(filename string) (map[string]map[string]map[string]*Travelnet, error) {
	content, err := ioutil.ReadFile(filename)
	if err != nil {
		return nil, err
	}

	return Parse(content)
}

// owner -> network -> name ->Travelnet-Data
func Parse(data []byte) (map[string]map[string]map[string]*Travelnet, error) {
	p := luaparser.New()
	travelnets := make(map[string]map[string]map[string]*Travelnet)

	ownermap, err := p.ParseMap(string(data[:]))

	if err != nil {
		return nil, err
	}

	for owner, rawnetworkmap := range ownermap {
		fmt.Println(owner)

		networkmap, ok := rawnetworkmap.(map[string]interface{})
		if !ok {
			return nil, errors.New("networkmap parsing failed")
		}

		for network, rawstationmap := range networkmap {
			fmt.Println("+", network)

			stationmap, ok := rawstationmap.(map[string]interface{})
			if !ok {
				return nil, errors.New("stationmap parsing failed")
			}

			for station, rawentries := range stationmap {
				fmt.Println("++", station)

				entries, ok := rawentries.(map[string]interface{})
				if !ok {
					return nil, errors.New("entries parsing failed")
				}

				for entry := range entries {
					fmt.Println("+++", entry)
					//TODO:
				}

			}
		}
	}

	return travelnets, nil
}