package router

import (
	"bytes"
	"html/template"
	"net/http"
	"testing"

	"github.com/stretchr/testify/assert"
)

const expectedHome = `
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>What is my IP Address ?</title>
</head>

<body>
    <h1>What is my IP ?</h1>
    <hr />
    <h2> Your IPv4 address is: 127.0.0.1</h2>
    <table>
        <tr> <td> Client Port      </td> <td> 1000 </td> </tr>
        <tr> <td> Host             </td> <td> localhost </td> </tr>
    </table>
    <h3> Geolocation </h3>
    <table>
        <tr> <td> Country          </td> <td> A Country </td> </tr>
        <tr> <td> Country Code     </td> <td> XX </td> </tr>
        <tr> <td> City             </td> <td> A City </td> </tr>
        <tr> <td> Latitude         </td> <td> 100 </td> </tr>
        <tr> <td> Longitude        </td> <td> -100 </td> </tr>
        <tr> <td> Postal Code      </td> <td> 00000 </td> </tr>
        <tr> <td> Time Zone        </td> <td> My/Timezone </td> </tr>
    </table>
    <h3> Autonomous System </h3>
    <table>
        <tr> <td> ASN              </td> <td> 0 </td> </tr>
        <tr> <td> ASN Organization </td> <td> My ISP </td> </tr>
    </table>
    <h3> Headers </h3>
    <table>
        <tr> <td> Header1       </td> <td> value1 </td> </tr>
        <tr> <td> Header2       </td> <td> value21 </td> </tr>
        <tr> <td> Header2       </td> <td> value22 </td> </tr>
        <tr> <td> Header3       </td> <td> value3 </td> </tr>
    </table>
</body>
</html>
`

func TestDefaultTemplate(t *testing.T) {
	req, _ := http.NewRequest("GET", "/", nil)
	req.Header = map[string][]string{
		"Header1": {"value1"},
		"Header2": {"value21", "value22"},
		"Header3": {"value3"},
	}

	tmpl, _ := template.New("home").Parse(home)
	response := JSONResponse{
		IP:         "127.0.0.1",
		IPVersion:  4,
		ClientPort: "1000",
		Host:       "localhost",
		Headers:    req.Header,
		GeoResponse: GeoResponse{
			Country:         "A Country",
			CountryCode:     "XX",
			City:            "A City",
			Latitude:        100,
			Longitude:       -100,
			PostalCode:      "00000",
			TimeZone:        "My/Timezone",
			ASN:             0,
			ASNOrganization: "My ISP",
		},
	}

	buf := &bytes.Buffer{}
	err := tmpl.Execute(buf, response)

	assert.Nil(t, err)
	assert.Equal(t, expectedHome, buf.String())
}