package jdapi

import "time"

// InvoiceDetailResult 发票申请
type InvoiceDetailResult struct {
	ApplyId                  int64       `json:"applyId"`                  // 申请单号
	OrderId                  int64       `json:"orderId"`                  // 订单号
	InvoiceType              int         `json:"invoiceType"`              // 发票类型 1:电子发票自开, 2:电子发票代开, 3:普通发票, 4:增值税专用发票
	SourceId                 int         `json:"sourceId"`                 // 申请单来源 10000:来自下单消息, 10010:电子发票系统补开, 10020:自助发票系统补开, 10030:交易纠纷系统补开, 10040:JOS平台
	InvoiceStatus            int         `json:"invoiceStatus"`            // 发票状态 1:待开票, 3:开票中, 4:开票成功, 5:开票失败, 6:冲红中, 7:冲红成功, 8:冲红失败, 9:已驳回, 11:蓝票审核失败, 12:红票审核失败, 13:待换开, 14:换开中, 15:换开驳回, 16:退款关闭, 17:驳回关闭
	InvoiceTitleType         int         `json:"invoiceTitleType"`         // 发票抬头类型 4:个人, 5:企业
	InvoiceTitle             string      `json:"invoiceTitle"`             // 发票抬头
	ConsumerTaxId            string      `json:"consumerTaxId"`            // 买家税号
	ConsumerAddress          string      `json:"consumerAddress"`          // 购买方公司地址
	ConsumerPhone            string      `json:"consumerPhone"`            // 购买方公司电话
	ConsumerBankName         string      `json:"consumerBankName"`         // 购买方公司开户行信息
	ConsumerBankAccount      string      `json:"consumerBankAccount"`      // 购买方公司银行账号
	LogisticsReceiverName    string      `json:"logisticsReceiverName"`    // 收票人姓名
	LogisticsReceiverPhone   string      `json:"logisticsReceiverPhone"`   // 收票人电话
	LogisticsReceiverAddress string      `json:"logisticsReceiverAddress"` // 收货地址信息
	ApplyTime                string      `json:"applyTime"`                // 发票申请时间
	RejectReason             string      `json:"rejectReason"`             // 驳回原因
	AuditTime                string      `json:"auditTime"`                // 审核时间
	OrderCompleteTime        string      `json:"orderCompleteTime"`        // 订单完成时间
	CustomerTaxNo            string      `json:"customerTaxNo"`            // 纳税人识别号
	IvcContentType           int         `json:"ivcContentType"`           // 发票内容类型 1:明细 2:类别
	IvcContentName           string      `json:"ivcContentName"`           // 发票内容名称
	CustomerEmail            string      `json:"customerEmail"`            // 消费者邮箱
	ShouldInvoiceAmount      float64     `json:"shouldInvoiceAmount"`      // 该订单按照京东规则计算出的应开票金额，商家也可以根据自己的规则使用金额项明细自己计算应开票金额
	AmountDetail             interface{} `json:"amountDetail"`             // 订单的金额项
	CompanyId                int64       `json:"companyId"`                // 公司主体id
	CompanyName              string      `json:"companyName"`              // 公司主体名称
	StoreId                  int64       `json:"storeId"`                  // 到家门店ID
	StoreName                string      `json:"storeName"`                // 到家门店名称
}

// InvoiceListResult 查询发票列表
type InvoiceListResult struct {
	InvoiceTypeName          string      `json:"invoiceTypeName"`          // 开票类型
	SourceId                 int64       `json:"sourceId"`                 // 10000下单, 10010商家主动补开, 10020消费者申请补开, 10021消费者申请修改, 10022消费者申请换开, 10030交易纠纷, 10040宙斯平台, 10050开普勒平台
	InvoiceStatusName        string      `json:"invoiceStatusName"`        // 申请单开票状态
	LogisticsReceiverAddress string      `json:"logisticsReceiverAddress"` // 收货地址信息
	InvoiceContentTypeName   string      `json:"invoiceContentTypeName"`   // 发票内容编号
	OrderId                  int64       `json:"orderId"`                  // 订单号
	InvoiceContentType       int64       `json:"invoiceContentType"`       // 发票内容编号 1明细，2类别
	CompanyName              string      `json:"companyName"`              // 公司名称
	StoreId                  int64       `json:"storeId"`                  // 到家门店ID
	StoreName                string      `json:"storeName"`                // 到家门店名称
	ConsumerPhone            string      `json:"consumerPhone"`            // 购买方公司电话
	InvoiceAmount            float64     `json:"invoiceAmount"`            // 建议开票金额
	OrderCompleteTime        int64       `json:"orderCompleteTime"`        // 订单完成时间
	RejectReason             string      `json:"rejectReason"`             // 驳回原因
	InvoiceTitleType         int64       `json:"invoiceTitleType"`         // 发票抬头类型 4:个人, 5:企业
	ConsumerTaxId            string      `json:"consumerTaxId"`            // 买家税号
	InvoiceType              int64       `json:"invoiceType"`              // 开票类型 1普票, 2增票, 3电票自开, 4电票代开
	InvoiceTitleTypeName     string      `json:"invoiceTitleTypeName"`     // 发票抬头类型
	IvcContentType           int64       `json:"ivcContentType"`           // 发票内容类型 1明细 2类别
	ApplyTime                int64       `json:"applyTime"`                // 申请时间
	InvoiceTitle             string      `json:"invoiceTitle"`             // 发票抬头
	ConsumerAddress          string      `json:"consumerAddress"`          // 购买方公司地址
	LogisticsReceiverName    string      `json:"logisticsReceiverName"`    // 收票人姓名
	IvcContentName           string      `json:"ivcContentName"`           // 发票内容类型
	CompanyId                int64       `json:"companyId"`                // 公司Id
	ConsumerBankAccount      string      `json:"consumerBankAccount"`      // 购买方公司银行账号
	LogisticsReceiverPhone   string      `json:"logisticsReceiverPhone"`   // 收票人电话
	AuditTime                time.Time   `json:"auditTime"`                // 审核时间
	AmountDetail             interface{} `json:"amountDetail"`             // 发票内容明细
	SourceName               string      `json:"sourceName"`               // 10000下单, 10010商家主动补开, 10020消费者申请补开, 10021消费者申请修改, 10022消费者申请换开, 10030交易纠纷, 10040宙斯平台, 10050开普勒平台
	UserType                 int64       `json:"userType"`                 // 用户类型 1企业用户 2个人用户
	InvoiceStatus            int64       `json:"invoiceStatus"`            // 申请单开票状态 1待开票, 3开票中, 4开票成功, 5开票失败, 6冲红中, 7冲红成功, 8冲红失败, 9已驳回, 11蓝票审核失败, 12红票审核失败, 13待换开, 14换开中, 15换开驳回, 16退款关闭, 17驳回关闭
	ConsumerBankName         string      `json:"consumerBankName"`         // 购买方公司开户行
	Oaid                     string      `json:"oaid"`                     // 收件人唯一标识，长度为256
}

// QueryInvoiceListParam 查询发票列表
type QueryInvoiceListParam struct {
	InvoiceStatusList      []int      `json:"invoiceStatusList"`      // 发票状态列表--发票状态 1:待开票, 3:开票中, 4:开票成功, 5:开票失败, 6:冲红中, 7:冲红成功, 8:冲红失败, 9:已驳回, 11:蓝票审核失败, 12:红票审核失败, 13:待换开, 14:换开中, 15:换开驳回, 16:退款关闭, 17:驳回关闭
	OrderId                int64      `json:"orderId"`                // 订单编号
	ApplyTimeOrder         string     `json:"applyTimeOrder"`         // 否    DESC：倒叙 ASC：正序    按申请时间排序规则
	OrderCompleteTimeStart *time.Time `json:"orderCompleteTimeStart"` // 订单完成时间-开始
	OrderCompleteTimeEnd   *time.Time `json:"orderCompleteTimeEnd"`   // 订单完成时间-结束
	ApplyTimeStart         *time.Time `json:"applyTimeStart"`         // 申请时间-开始（仅支持查询申请时间在两年内的发票申请记录）
	ApplyTimeEnd           *time.Time `json:"applyTimeEnd"`           // 申请时间-结束（仅支持查询申请时间在两年内的发票申请记录）
	StoreId                int64      `json:"storeId"`                // 到家门店ID
	PageSize               int        `json:"pageSize"`               // 每页行数（最大20）
	PageIndex              int        `json:"pageIndex"`              // 页码
}

// BlueTicketParam 上传蓝票
type BlueTicketParam struct {
	OrderId          string `json:"orderId"`          // 订单编号
	ReceiverTaxNo    string `json:"receiverTaxNo"`    // 销货方识别号（税号）
	ReceiverName     string `json:"receiverName"`     // 销货方公司名称
	InvoiceCode      string `json:"invoiceCode"`      // (不传为电子发票、传为普通发票)	发票代码
	IvcTitle         string `json:"ivcTitle"`         // 个人	发票抬头
	TotalPrice       string `json:"totalPrice"`       // 开票金额
	InvoiceTime      string `json:"invoiceTime"`      // 开票时间
	PdfInfo          string `json:"pdfInfo"`          // PDF文件二进制流base64
	FullEleInvoiceNo string `json:"fullEleInvoiceNo"` // 普通发票号码/全电发票号码
}
