package xugu

import (
	"bufio"
)

// ----------------------------------------------------------------------------------------------------
type SrvResponse struct {
	FormArgDescri []*FormArgDescri
	SelectResult  []*SelectResult
	InsertResult  []*InsertResult
	UpdateResult  []*UpdateResult
	DeleteResult  []*DeleteResult
	ProcRet       []*ProcRet
	OutParamRet   []*OutParamRet
	ErrInfo       []*ErrInfo
	WarnInfo      []*WarnInfo
	Message       []*Message
}



// func parseResponse(conn net.Conn) (*SrvResponse, error) {
// 	response := &SrvResponse{}
// 	reader := bufio.NewReader(conn)

// 	for {
// 		msgType, err := reader.ReadByte()
// 		if err != nil {
// 			return nil, err
// 		}

// 		switch msgType {
// 		case '$':
// 			argDescri, err := parseFormArgDescri(reader)
// 			if err != nil {
// 				return nil, err
// 			}
// 			response.FormArgDescri = append(response.FormArgDescri, argDescri)

// 		case 'I':
// 			insertResult, err := parseInsertResult(reader)
// 			if err != nil {
// 				return nil, err
// 			}
// 			response.InsertResult = append(response.InsertResult, insertResult)
// 		case 'U':
// 			updateResult, err := parseUpdateResult(reader)
// 			if err != nil {
// 				return nil, err
// 			}
// 			response.UpdateResult = append(response.UpdateResult, updateResult)
// 		case 'D':
// 			deleteResult, err := parseDeleteResult(reader)
// 			if err != nil {
// 				return nil, err
// 			}
// 			response.DeleteResult = append(response.DeleteResult, deleteResult)
// 		case 'O':
// 			procRet, err := parseProcRet(reader)
// 			if err != nil {
// 				return nil, err
// 			}
// 			response.ProcRet = append(response.ProcRet, procRet)
// 		case 'P':
// 			outParamRet, err := parseOutParamRet(reader)
// 			if err != nil {
// 				return nil, err
// 			}
// 			response.OutParamRet = append(response.OutParamRet, outParamRet)
// 		case 'E':
// 			errInfo, err := parseErrInfo(reader)
// 			if err != nil {
// 				return nil, err
// 			}
// 			response.ErrInfo = append(response.ErrInfo, errInfo)
// 		case 'W':
// 			warnInfo, err := parseWarnInfo(reader)
// 			if err != nil {
// 				return nil, err
// 			}
// 			response.WarnInfo = append(response.WarnInfo, warnInfo)
// 		case 'M':
// 			message, err := parseMessage(reader)
// 			if err != nil {
// 				return nil, err
// 			}
// 			response.Message = append(response.Message, message)
// 		case 'K':
// 			return response, nil
// 		default:
// 			return nil, fmt.Errorf("未知的消息类型: %v", msgType)
// 		}
// 	}
// }

// 解析函数的实现,例如 parseFormArgDescri 等


func readString(reader *bufio.Reader, length int) (string, error) {
	bytes := make([]byte, length)
	_, err := reader.Read(bytes)
	return string(bytes), err
}

func parseFieldDescri(reader *bufio.Reader) (FieldDescri, error) {
	fieldDescri := FieldDescri{}
	var err error

	fieldDescri.FieldNameLen, err = readInt32(reader)
	if err != nil {
		return fieldDescri, err
	}
	fieldDescri.FieldName, err = readString(reader, fieldDescri.FieldNameLen)
	if err != nil {
		return fieldDescri, err
	}
	// fieldDescri.FieldType, err = fieldType(reader)
	// if err != nil {
	// 	return fieldDescri, err
	// }
	fieldDescri.FieldPreciScale, err = readInt32(reader)
	if err != nil {
		return fieldDescri, err
	}
	fieldDescri.FieldFlag, err = readInt32(reader)
	if err != nil {
		return fieldDescri, err
	}

	return fieldDescri, nil
}