package spider

import (
	"encoding/json"
	"errors"

	e "github.com/dabory/abango-rest/etc"
	"github.com/elastic/go-elasticsearch/v7"
)

type SchDitem struct {
	Id string //PdplinkHash
	// PdplinkHash string
	TopUrl     string
	TargetPath string // URL without scheme info
	HtmlHash   string
	HubUrls    string
	IgroupCode string
	IgroupName string
	Categories string
	Emails     string
	ItemName   string
	Tags       string
	Currency   string
	SalesPrice string

	Images    string
	ShortDesc string
	TextDesc  string

	OgMetas     string
	ItemOptions string

	OriginDesc    string
	Manufacturer  string
	Origin        string
	Language      string
	DeliveryPrice string
	ModelNo       string
	Sku           string
	// ItemNick      string
	// ModelName     string
	// ModelNo       string
	// BrandName     string
	// MinimumQty    float32
	// UserCredit    float32
	// Suggest     []string
	// Cats        []string
	// Options     []struct {
	// 	Name    string
	// 	Choices []struct {
	// 		Name  string
	// 		Price string
	// 	}
	// }
}

type SchDitemRow struct {
	ID     string   `json:"_id"`
	Index  string   `json:"_index"`
	Score  float64  `json:"_score"`
	Source SchDitem `json:"_source"`
	Type   string   `json:"_type"`
}

func (t *SchDitem) TableName() string { // 반드시 있어야 table name을 가져올 수 있다.
	return e.TableName(*t)
}

func (t *SchDitem) RecordName() string { //필수
	return "Id of " + t.Id + " in " + e.TableName(*t) + " "
}

func (t *SchDitem) GetaRow(y *elasticsearch.Client) error {

	res, err := y.Get(e.TableName(*t), t.Id)
	defer res.Body.Close()

	if err != nil {
		return e.LogErr("qrlhbdft", "Error of index: "+t.TableName()+": ", err)
	} else {
		if res.IsError() { //NotFound
			return errors.New(e.RecNotFound("qrhbdfke4k", "in "+t.TableName()+" of Id: "+t.Id))
		}
	}

	var resJs SchDitemRow
	if err := json.NewDecoder(res.Body).Decode(&resJs); err != nil {
		return e.LogErr("qrlhbdfk", "Error decoding "+t.TableName()+": ", err)
	}

	*t = SchDitem(resJs.Source)
	// *t = resJs.Source
	return nil
}

// func (t *SchDitem) AddaRow(y *elasticsearch.Client) error {

// 	data, _ := json.Marshal(t)
// 	res, err := y.Index(
// 		e.TableName(*t),
// 		bytes.NewReader(data),
// 		y.Index.WithDocumentID((t.Id)))
// 	defer res.Body.Close()

// 	if err != nil {
// 		return errors.New(e.RecAddErr("jfhgytg", t.RecordName()+err.Error()))
// 	}
// 	return nil

// }

// func (t *SchDitem) DelaRow(y *elasticsearch.Client) error {

// 	res, err := y.Delete(e.TableName(*t), t.Id)
// 	defer res.Body.Close()

// 	if err != nil {
// 		return errors.New(e.RecAddErr("jfhgy4tg", t.RecordName()+err.Error()))
// 	}
// 	return nil
// }
