// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Parse Plan 9 timezone(2) files.

package time

//import (
//	"strconv"
//	"strings"
//)

func parseZones(s string) (zt []zonetime) {
	f := strings.Fields(s)
	if len(f) < 4 {
		return
	}

	// standard timezone offset
	o, err := strconv.Atoi(f[1])
	if err != nil {
		return
	}
	std := &zone{name: f[0], utcoff: o, isdst: false}

	// alternate timezone offset
	o, err = strconv.Atoi(f[3])
	if err != nil {
		return
	}
	dst := &zone{name: f[2], utcoff: o, isdst: true}

	// transition time pairs
	f = f[4:]
	for i := 0; i < len(f); i++ {
		z := std
		if i%2 == 0 {
			z = dst
		}
		t, err := strconv.Atoi(f[i])
		if err != nil {
			return nil
		}
		t -= std.utcoff
		zt = append(zt, zonetime{time: int32(t), zone: z})
	}
	return
}

func initLocal() {
	t, err := os.Getenverror("timezone")
	if err != nil {
		// do nothing: use UTC
		return
	}
	zones = parseZones(t)
}

func initTestingZone() {
	buf, err := readFile("/adm/timezone/US_Pacific")
	if err != nil {
		return
	}
	zones = parseZones(string(buf))
}
