package logic

import (
	"fmt"

	"github.com/fonchain/fonchain-artistinfo/cmd/internal/dao"
	statement "github.com/fonchain/fonchain-artistinfo/pb/artistinfoStatement"
)

type IStatement interface {
	StatementList(req *statement.StatementListRequest) (rep *statement.StatementListRespond, err error)
	GetTxInfoByBatchUid(req *statement.GetTxInfoByBatchUidRequest) (rep *statement.GetTxInfoByBatchUidRespond, err error)
}

func NewStatement() IStatement {
	return &Statement{}
}

type Statement struct {
}

func (a *Statement) StatementList(req *statement.StatementListRequest) (rep *statement.StatementListRespond, err error) {
	//查看是否有该画家
	user, err := dao.GetArtistInfoById(req.ArtistUid)
	if err != nil {
		return
	}

	fmt.Println("user:", user)

	ContractData, err := dao.StatementList(user.MgmtArtistUid, req.State)
	if err != nil {
		return
	}

	rep = &statement.StatementListRespond{
		Data: ContractData,
	}

	return
}

func (a *Statement) GetTxInfoByBatchUid(req *statement.GetTxInfoByBatchUidRequest) (rep *statement.GetTxInfoByBatchUidRespond, err error) {

	rep = &statement.GetTxInfoByBatchUidRespond{}

	//获取画家名
	artworkTx, err := dao.GetArtistNameByBatchUid(req.BatchUid)
	if err != nil {
		return
	}
	rep.ArtistName = artworkTx.ArtistName

	//获取物权画作详细信息
	artworkTxDetails, err := dao.GetArtworkTxDetailByBatchUid(req.BatchUid)
	if err != nil {
		return
	}
	rep.ArtistName = artworkTx.ArtistName

	//获取物权画作被售卖详细信息
	artworkSoldTxDetails, err := dao.GetArtworkSoldTxDetailByBatchUid(req.BatchUid)
	if err != nil {
		return
	}

	artworkTxDetail := new(statement.ArtworkTxDetail)
	artworkSoldTxDetail := new(statement.ArtworkSoldTxDetail)

	for _, v := range artworkTxDetails {
		artworkTxDetail.TfNum = v.TfNum
		artworkTxDetail.ArtworkName = v.ArtworkName
		artworkTxDetail.Ruler = v.Ruler
		artworkTxDetail.MinPrice = v.MinPrice
		artworkTxDetail.GuaranteePrice = v.GuaranteePrice
		rep.ArtworkTxDetail = append(rep.ArtworkTxDetail, artworkTxDetail)
	}

	for _, v := range artworkSoldTxDetails {
		artworkSoldTxDetail.TfNum = v.TfNum
		artworkSoldTxDetail.ArtworkName = v.ArtworkName
		artworkSoldTxDetail.Ruler = v.Ruler
		artworkSoldTxDetail.SaleNo = v.SaleNo
		artworkSoldTxDetail.CompleteDate = v.CompleteDate
		artworkSoldTxDetail.MinPrice = v.MinPrice
		artworkSoldTxDetail.SalePrice = v.SalePrice
		artworkSoldTxDetail.GuaranteePrice = v.GuaranteePrice
		rep.ArtworkSoldTxDetail = append(rep.ArtworkSoldTxDetail, artworkSoldTxDetail)
	}

	return
}