package mtwmapi

import (
	"fmt"
	"git.rosy.net.cn/baseapi/utils"
	"strings"
)

type InvoiceCallback struct {
	Timestamp              string `json:"timestamp"`                 // 时间戳
	AppId                  string `json:"app_id"`                    // 美团分配给APP方的id
	Sig                    string `json:"sig"`                       // 输入参数计算后的签名结果
	MtRequestId            string `json:"mt_request_id"`             // 平台请求id，由平台自动生成并保证唯一性，不参与业务逻辑，在接口响应时返回给商家系统
	OrderId                string `json:"order_id"`                  // 订单ID
	InvoiceTaskId          string `json:"invoice_task_id"`           // 开票任务id
	PushType               string `json:"push_type"`                 // 消息类型，1-开发票，3-催发票
	InvoiceTitle           string `json:"invoice_title"`             // 发票的抬头。
	TaxpayerId             string `json:"taxpayer_id"`               // 纳税人识别号
	NeedInvoiceByCategory  int    `json:"need_invoice_by_category"`  // 1-需要按大类开票；2-需要商品明细开
	CompanyAddress         string `json:"company_address"`           // 公司地址
	CompanyPhone           string `json:"company_phone"`             // 电话
	AccountBank            string `json:"account_bank"`              // 开户银行
	AccountNumber          string `json:"account_number"`            // 开户账号
	Email                  string `json:"email"`                     // 邮箱
	EmailExpireTime        int64  `json:"email_expire_time"`         // 邮箱有效期
	ItemTotalInvoiceAmount int64  `json:"item_total_invoice_amount"` // 商家开票金额
}

// UploadInvoice 上传发票给用户
func (a *API) UploadInvoice(orderId, invoiceUrl, invoiceId, taskId string) (err error) {
	resp, err := a.AccessAPI2("ecommerce/invoice/upload", false, map[string]interface{}{
		KeyOrderID:        orderId,
		"invoice_url":     invoiceUrl,
		"invoice_id":      invoiceId,
		"invoice_task_id": taskId,
	}, "", "")

	if err != nil {
		return err
	}

	if utils.MustInterface2Int64(resp.(map[string]interface{})["result_code"]) == 1 {
		return nil
	}

	errMsg := make([]string, 0, 0)
	if resp.(map[string]interface{})["error_list"] != nil {
		for _, v := range resp.(map[string]interface{})["error_list"].([]interface{}) {
			errMsg = append(errMsg, v.(map[string]interface{})["msg"].(string))
		}
	}
	return fmt.Errorf("%s", strings.Join(errMsg, ","))
}
