/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package hessian

import (
	"fmt"
	"reflect"
	"testing"
	"time"
)

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

func TestEncList(t *testing.T) {
	var (
		list []interface{}
		err  error
		e    *Encoder
		d    *Decoder
		res  interface{}
	)

	e = NewEncoder()
	list = []interface{}{100, 10.001, "hello", []byte{0, 2, 4, 6, 8, 10}, true, nil, false}
	e.Encode(list)
	assert.NotEqual(t, 0, len(e.Buffer()))

	d = NewDecoder(e.Buffer())
	res, err = d.Decode()
	assert.NoError(t, err)
	assert.Equal(t, fmt.Sprintf("%v", list), fmt.Sprintf("%v", res))

	// typed list - int32
	e = NewEncoder()
	list_1 := []int32{1, 2, 3}
	e.Encode(list_1)
	assert.NotEqual(t, 0, len(e.Buffer()))

	d = NewDecoder(e.Buffer())
	res, err = d.Decode()
	assert.NoError(t, err)
	assert.True(t, reflect.DeepEqual(res, list_1))

	// typed list - [][][]int32
	e = NewEncoder()
	list_2 := [][][]int32{{{1, 2, 3}, {4, 5, 6, 7}}, {{8, 9, 10}, {11, 12, 13, 14}}}
	e.Encode(list_2)
	assert.NotEqual(t, 0, len(e.Buffer()))

	d = NewDecoder(e.Buffer())
	res, err = d.Decode()
	assert.NoError(t, err)
	assert.True(t, reflect.DeepEqual(res, list_2))
}

func TestListRefSelf(t *testing.T) {
	RegisterPOJOs(new(A0), new(A1))

	r, e := decodeJavaResponse("customReplyTypedFixedListRefSelf", "", true)
	if e != nil {
		t.Errorf("%s: decode fail with error: %v", "customReplyTypedFixedListRefSelf", e)
		return
	}

	res := r.([]Object)
	assert.Equal(t, 3, len(res))
	assert.Equal(t, new(A0), res[0])
	assert.Equal(t, new(A1), res[1])
	assert.Equal(t, res, res[2])
}

func TestList(t *testing.T) {
	RegisterPOJOs(new(A0), new(A1), new(TypedListTest))

	testDecodeFramework(t, "replyTypedFixedList_0", []string{})
	testDecodeFramework(t, "replyTypedFixedList_1", []string{"1"})
	testDecodeFramework(t, "replyTypedFixedList_7", []string{"1", "2", "3", "4", "5", "6", "7"})
	testDecodeFramework(t, "replyTypedFixedList_8", []string{"1", "2", "3", "4", "5", "6", "7", "8"})
	testDecodeFramework(t, "replyUntypedFixedList_0", []interface{}{})
	testDecodeFramework(t, "replyUntypedFixedList_1", []interface{}{"1"})
	testDecodeFramework(t, "replyUntypedFixedList_7", []interface{}{"1", "2", "3", "4", "5", "6", "7"})
	testDecodeFramework(t, "replyUntypedFixedList_8", []interface{}{"1", "2", "3", "4", "5", "6", "7", "8"})

	testDecodeFramework(t, "customReplyTypedFixedListHasNull", []Object{new(A0), new(A1), nil})
	testDecodeFramework(t, "customReplyTypedVariableListHasNull", []Object{new(A0), new(A1), nil})
	testDecodeFramework(t, "customReplyUntypedFixedListHasNull", []interface{}{new(A0), new(A1), nil})
	testDecodeFramework(t, "customReplyUntypedVariableListHasNull", []interface{}{new(A0), new(A1), nil})

	testDecodeFramework(t, "customReplyTypedFixedList_A0", []*A0{new(A0), new(A0), nil})
	testDecodeFramework(t, "customReplyTypedVariableList_A0", []*A0{new(A0), new(A0), nil})

	testDecodeFramework(t, "customReplyTypedFixedList_int", []int32{1, 2, 3})
	testDecodeFramework(t, "customReplyTypedVariableList_int", []int32{1, 2, 3})

	testDecodeFramework(t, "customReplyTypedFixedList_long", []int64{1, 2, 3})
	testDecodeFramework(t, "customReplyTypedVariableList_long", []int64{1, 2, 3})

	testDecodeFramework(t, "customReplyTypedFixedList_float", []float64{1, 2, 3})
	testDecodeFramework(t, "customReplyTypedVariableList_float", []float64{1, 2, 3})

	testDecodeFramework(t, "customReplyTypedFixedList_double", []float64{1, 2, 3})
	testDecodeFramework(t, "customReplyTypedVariableList_double", []float64{1, 2, 3})

	testDecodeFramework(t, "customReplyTypedFixedList_short", []int32{1, 2, 3})
	testDecodeFramework(t, "customReplyTypedVariableList_short", []int32{1, 2, 3})

	testDecodeFramework(t, "customReplyTypedFixedList_char", []string{"1", "2", "3"})
	testDecodeFramework(t, "customReplyTypedVariableList_char", []string{"1", "2", "3"})

	testDecodeFramework(t, "customReplyTypedFixedList_boolean", []bool{true, false, true})
	testDecodeFramework(t, "customReplyTypedVariableList_boolean", []bool{true, false, true})

	testDecodeFramework(t, "customReplyTypedFixedList_date", []time.Time{
		time.Unix(1560864, 0),
		time.Unix(1560864, 0), time.Unix(1560864, 0),
	})
	testDecodeFramework(t, "customReplyTypedVariableList_date", []time.Time{
		time.Unix(1560864, 0),
		time.Unix(1560864, 0), time.Unix(1560864, 0),
	})

	testDecodeFramework(t, "customReplyTypedFixedList_arrays", [][][]int32{{{1, 2, 3}, {4, 5, 6, 7}}, {{8, 9, 10}, {11, 12, 13, 14}}})
	testDecodeFramework(t, "customReplyTypedFixedList_A0arrays", [][][]*A0{
		{{new(A0), new(A0), new(A0)}, {new(A0), new(A0), new(A0), nil}},
		{{new(A0)}, {new(A0)}},
	})

	testDecodeFramework(t, "customReplyTypedFixedList_Test", &TypedListTest{A: &A0{}, List: [][]*A0{{new(A0), new(A0)}, {new(A0), new(A0)}}, List1: [][]*A1{{new(A1), new(A1)}, {new(A1), new(A1)}}})

	testDecodeFramework(t, "customReplyTypedFixedList_Object", []Object{new(A0)})
}

func TestListEncode(t *testing.T) {
	RegisterPOJOs(new(A0))

	testJavaDecode(t, "argUntypedFixedList_0", []interface{}{})
	testJavaDecode(t, "argUntypedFixedList_1", []interface{}{"1"})
	testJavaDecode(t, "argUntypedFixedList_7", []interface{}{"1", "2", "3", "4", "5", "6", "7"})
	testJavaDecode(t, "argUntypedFixedList_8", []interface{}{"1", "2", "3", "4", "5", "6", "7", "8"})

	testJavaDecode(t, "customArgUntypedFixedListHasNull", []interface{}{new(A0), new(A1), nil})

	testJavaDecode(t, "customArgTypedFixedList", []*A0{new(A0)})

	testJavaDecode(t, "argTypedFixedList_0", []string{})
	testJavaDecode(t, "argTypedFixedList_7", []string{"1", "2", "3", "4", "5", "6", "7"})

	testJavaDecode(t, "customArgTypedFixedList_short_0", []int8{})
	testJavaDecode(t, "customArgTypedFixedList_short_7", []int8{1, 2, 3, 4, 5, 6, 7})
	testJavaDecode(t, "customArgTypedFixedList_short_0", []int16{})
	testJavaDecode(t, "customArgTypedFixedList_short_7", []int16{1, 2, 3, 4, 5, 6, 7})
	testJavaDecode(t, "customArgTypedFixedList_short_0", []uint16{})
	testJavaDecode(t, "customArgTypedFixedList_short_7", []uint16{1, 2, 3, 4, 5, 6, 7})

	testJavaDecode(t, "customArgTypedFixedList_int_0", []int32{})
	testJavaDecode(t, "customArgTypedFixedList_int_7", []uint32{1, 2, 3, 4, 5, 6, 7})

	testJavaDecode(t, "customArgTypedFixedList_long_0", []int{})
	testJavaDecode(t, "customArgTypedFixedList_long_7", []int{1, 2, 3, 4, 5, 6, 7})
	testJavaDecode(t, "customArgTypedFixedList_long_0", []uint{})
	testJavaDecode(t, "customArgTypedFixedList_long_7", []uint{1, 2, 3, 4, 5, 6, 7})
	testJavaDecode(t, "customArgTypedFixedList_long_0", []int64{})
	testJavaDecode(t, "customArgTypedFixedList_long_7", []int64{1, 2, 3, 4, 5, 6, 7})
	testJavaDecode(t, "customArgTypedFixedList_long_0", []uint64{})
	testJavaDecode(t, "customArgTypedFixedList_long_7", []uint64{1, 2, 3, 4, 5, 6, 7})

	testJavaDecode(t, "customArgTypedFixedList_float_0", []float32{})
	testJavaDecode(t, "customArgTypedFixedList_float_7", []float32{1, 2, 3, 4, 5, 6, 7})

	testJavaDecode(t, "customArgTypedFixedList_double_0", []float64{})
	testJavaDecode(t, "customArgTypedFixedList_double_7", []float64{1, 2, 3, 4, 5, 6, 7})

	testJavaDecode(t, "customArgTypedFixedList_boolean_0", []bool{})
	testJavaDecode(t, "customArgTypedFixedList_boolean_7", []bool{true, false, true, false, true, false, true})

	testJavaDecode(t, "customArgTypedFixedList_date_0", []time.Time{})
	testJavaDecode(t, "customArgTypedFixedList_date_3", []time.Time{
		time.Unix(1560864, 0),
		time.Unix(1560864, 0), time.Unix(1560864, 0),
	})

	testJavaDecode(t, "customArgTypedFixedList_arrays", [][][]int32{{{1, 2, 3}, {4, 5, 6, 7}}, {{8, 9, 10}, {11, 12, 13, 14}}})
	testJavaDecode(t, "customArgTypedFixedList_A0arrays", [][][]*A0{
		{{new(A0), new(A0), new(A0)}, {new(A0), new(A0), new(A0), nil}},
		{{new(A0)}, {new(A0)}},
	})

	testJavaDecode(t, "customArgTypedFixedList_Test", &TypedListTest{A: new(A0), List: [][]*A0{{new(A0), new(A0)}, {new(A0), new(A0)}}, List1: [][]*A1{{new(A1), new(A1)}, {new(A1), new(A1)}}})

	testJavaDecode(t, "customArgTypedFixedList_Object", []Object{new(A0)})
}

type TypedListTest struct {
	A     *A0
	List  [][]*A0
	List1 [][]*A1
}

// JavaClassName  java fully qualified path
func (*TypedListTest) JavaClassName() string {
	return "test.TypedListTest"
}
