package gopher_test

import (
	"fmt"
	"log"
	"os"
	"testing"

	"github.com/prologic/go-gopher"
	"github.com/stretchr/testify/assert"
)

func hello(w gopher.ResponseWriter, r *gopher.Request) {
	w.WriteInfo("Hello World!")
}

func Example_client() {
	res, err := gopher.Get("gopher://gopher.floodgap.com")
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(res.Dir.ToText())
}

func Example_server() {
	gopher.HandleFunc("/hello", hello)
	log.Fatal(gopher.ListenAndServe("localhost:7000", nil))
}

func Example_fileserver() {
	gopher.Handle("/", gopher.FileServer(gopher.Dir("/tmp")))
	log.Fatal(gopher.ListenAndServe("localhost:7000", nil))
}

func TestGet(t *testing.T) {
	assert := assert.New(t)

	res, err := gopher.Get("gopher://localhost:7000/1hello")
	assert.Nil(err)

	b, err := res.Dir.ToText()
	assert.Nil(err)

	t.Logf("res: %s", string(b))

	assert.Len(res.Dir, 1)

	assert.Equal(res.Dir[0].Type, gopher.INFO)
	assert.Equal(res.Dir[0].Description, "Hello World!")
}

func TestMain(m *testing.M) {
	gopher.HandleFunc("/hello", hello)
	go func() {
		log.Fatal(gopher.ListenAndServe("localhost:7000", nil))
	}()

	os.Exit(m.Run())
}
