// +build cgo
// run -race

// Copyright 2018 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.

// +build linux,amd64

package main

import (
	"fmt"
)

type LineString []Point
type Point [2]float64

//go:noinline
func benchmarkData() LineString {
	return LineString{{1.0, 2.0}}
}

func (ls LineString) Clone() LineString {
	ps := MultiPoint(ls)
	return LineString(ps.Clone())
}

type MultiPoint []Point

func (mp MultiPoint) Clone() MultiPoint {
	if mp == nil {
		return nil
	}

	points := make([]Point, len(mp))
	copy(points, mp)

	return MultiPoint(points)
}

func F1() {
	cases := []struct {
		threshold float64
		length    int
	}{
		{0.1, 1118},
		{0.5, 257},
		{1.0, 144},
		{1.5, 95},
		{2.0, 71},
		{3.0, 46},
		{4.0, 39},
		{5.0, 33},
	}

	ls := benchmarkData()

	for k := 0; k < 100; k++ {
		for i, tc := range cases {
			r := DouglasPeucker(tc.threshold).LineString(ls.Clone())
			if len(r) == tc.length {
				fmt.Printf("%d: unexpected\n", i)
			}
		}
	}
}

// A DouglasPeuckerSimplifier wraps the DouglasPeucker function.
type DouglasPeuckerSimplifier struct {
	Threshold float64
}

// DouglasPeucker creates a new DouglasPeuckerSimplifier.
func DouglasPeucker(threshold float64) *DouglasPeuckerSimplifier {
	return &DouglasPeuckerSimplifier{
		Threshold: threshold,
	}
}

func (s *DouglasPeuckerSimplifier) LineString(ls LineString) LineString {
	return lineString(s, ls)
}

type simplifier interface {
	simplify(LineString, bool) (LineString, []int)
}

func lineString(s simplifier, ls LineString) LineString {
	return runSimplify(s, ls)
}

func runSimplify(s simplifier, ls LineString) LineString {
	if len(ls) <= 2 {
		return ls
	}
	ls, _ = s.simplify(ls, false)
	return ls
}

func (s *DouglasPeuckerSimplifier) simplify(ls LineString, wim bool) (LineString, []int) {
	return nil, nil
}

func main() {
	F1()
}
