package taxerr

import (
	"fmt"
	"strings"
)

type UserErr struct {
	Msg string
}

func (u *UserErr) Error() string {
	return u.Msg
}

func (u *UserErr) Is(err error) bool {
	e, ok := err.(*UserErr)
	return ok && e.Msg == u.Msg
}

// 用户错误 比如报表错误提示
func NewUser(msg string) *UserErr {
	return &UserErr{
		Msg: msg,
	}
}

// v3新版报错提示
// @errmsg 错误原因
// @prompt 操作提示
func NewUserV3(errmsg, prompt string) *UserErr {
	return &UserErr{
		Msg: `<span>[错误]:` + errmsg + `</span><br />[操作]:` + prompt,
	}
}

/*错误规范
 *1.结尾不带符号
 *2.表明确错误信息，做到让不懂会计的也能看懂，报表问题按税局提示即可
 *3.第一句提示错误原因，之后提示办法 例如 网页请求超时，请稍后重试
 *4.通用错误例如超时，找不到报表等，优先使用定义好的错误
 *5.需要明确提示错误信息，用New() NewUser()方法自定义 例如 NewUser(`手机号不一致，税局为xxx,系统为xxx`)
 */
//手机号
var SmsCodeNotReceived = NewUser(`<span>[错误]:手机验证码接收失败</span><br />[操作]:请检查短信APP或短信转发设备是否正常`)
var SmsCodeReceivedIncorrect = NewUser(`<span>[错误]:本次接收到的手机验证码不正确</span><br />[操作]:请重试`)

// 企业相关
var Sz = NewUser(`<span>[错误]:电子税务局未查询到税种信息</span><br />[操作]:请确认企业是否核定税种`)
var KjzeXz = NewUser(`<span>[错误]:会计准则选择有误</span><br />[操作]:请修改正确后重试`)

var YbnsrZg = NewUser(`<span>[错误]:纳税人资格选择错误,税局为(一般纳税人)</span><br />[操作]:请修改后重试`)
var XgmnsrZg = NewUser(`<span>[错误]:纳税人资格选择错误,税局为(小规模纳税人)</span><br />[操作]:请修改后重试`)

// 采集相关
var StartPeriod = NewUser(`<span>[错误]:初始账期有误</span><br />[操作]:请删除后重新添加此企业`)
var EtaxPassword = NewUser(`<span>[错误]:电子税局企业密码错误</span><br />[操作]:请改正后重试`)
var EtaxPersonalPassword = NewUser(`<span>[错误]:电子税局个人密码错误</span><br />[操作]:请改正后重试`)

var ZzsNotFound = NewUser(`<span>[错误]:电子税务局未查询到增值税报表`)
var QysdsNotFound = NewUser(`<span>[错误]:电子税务局未查询到企业所得税报表`)
var QysdsYearNotFound = NewUser(`<span>[错误]:电子税务局未查询到上年企业所得税报表年报`)
var CwbbNotFound = NewUser(`<span>[错误]:电子税务局未查询到财务报表`)
var CwbbErr = NewUser(`<span>[错误]:财务报表 会计准则有误，请核实后重新发起`)

// 账期
func NotFound(period, tableName string) error {
	p := period
	if len(p) > 6 {
		p = strings.ReplaceAll(period, "-", "")[:6]
	}
	return NewUser(fmt.Sprintf(`<span>[错误]:电子税务局未查询到%s账期%s`, p, tableName))
}

func NotFoundBeginAndEnd(begin, end, tableName string) error {
	return NewUser(fmt.Sprintf(`<span>[错误]:电子税务局未查询到%s-%s账期%s`, strings.ReplaceAll(begin, "-", "")[:6], strings.ReplaceAll(end, "-", "")[:6], tableName))
}

// 申报相关
var CwbbEmpty = NewUser(`<span>[错误]:财务报表数据为空</span><br />[操作]:请重新取数后重试`)
var KjZcfzEmpty = NewUser(`<span>[错误]:资产负债表数据为空</span><br />[操作]:请重新取数后重试`)
var KjLrbEmpty = NewUser(`<span>[错误]:利润表数据为空</span><br />[操作]:请重新取数后重试`)
var KjXjllbEmpty = NewUser(`<span>[错误]:现金流量表数据为空</span><br />[操作]:请重新取数后重试`)
var NoBsqx = NewUser(`<span>[错误]:当前登录人员未找到有办税权限的身份</span><br />[操作]:请核实`)

var DqdeZbEmpty = NewUser(`<span>[错误]:定期定额数据为空</span><br />[操作]:请重新取数后重试`)
var SmallVatZbEmpty = NewUser(`<span>[错误]:主表数据为空</span><br />[操作]:请重新取数后重试`)
var SmallVatFb1Empty = NewUser(`<span>[错误]:附表1数据为空</span><br />[操作]:请重新取数后重试`)
var SmallVatFb2Empty = NewUser(`<span>[错误]:附表2数据为空</span><br />[操作]:请重新取数后重试`)
var SmallVatFb5Empty = NewUser(`<span>[错误]:附表5数据为空</span><br />[操作]:请重新取数后重试`)
var SmallVatJmmxEmpty = NewUser(`<span>[错误]:减免明细表数据为空</span><br />[操作]:请重新取数后重试`)
var GsSmallVatFb4 = NewUser(`<span>[错误]:小规模增值税开票信息/销售额 服务为空</span><br />[操作]:请重新取数后重试`)
var GsSmallVatFb5 = NewUser(`<span>[错误]:小规模增值税开票信息/销售额 货物为空</span><br />[操作]:请重新取数后重试`)
var GsSmallVatFb6 = NewUser(`<span>[错误]:小规模增值税税额 服务为空</span><br />[操作]:请重新取数后重试`)
var GsSmallVatFb7 = NewUser(`<span>[错误]:小规模增值税税额 货物为空</span><br />[操作]:请重新取数后重试`)

var VatZbEmpty = NewUser(`<span>[错误]:主表数据为空</span><br />[操作]:请重新取数后重试`)
var VatFb1Empty = NewUser(`<span>[错误]:附表1数据为空</span><br />[操作]:请重新取数后重试`)
var VatFb2Empty = NewUser(`<span>[错误]:附表2数据为空</span><br />[操作]:请重新取数后重试`)
var VatFb3Empty = NewUser(`<span>[错误]:附表3数据为空</span><br />[操作]:请重新取数后重试`) //附表3 不是必须申报
var VatFb4Empty = NewUser(`<span>[错误]:附表4数据为空</span><br />[操作]:请重新取数后重试`)
var VatFb5Empty = NewUser(`<span>[错误]:附表5数据为空</span><br />[操作]:请重新取数后重试`)
var VatJmmxEmpty = NewUser(`<span>[错误]:减免明细表数据为空</span><br />[操作]:请重新取数后重试`)
var VatNcpEmpty = NewUser(`<span>[错误]:《购进农产品直接销售核定农产品增值税进项税额计算表》数据为空</span><br />[操作]:请重新取数后重试`)

// 减免性质代码 自己提示
var QysdsEmpty = NewUser(`<span>[错误]:企业所得税数据为空</span><br />[操作]:请重新取数后重试`)
var Gsa201020Empty = NewUser(`<span>[错误]:Gsa201020表数据为空</span><br />[操作]:请重新取数后重试`)
var QysdsFb1Empty = NewUser(`<span>[错误]:企业所得税附表1数据为空</span><br />[操作]:请重新取数后重试`)
var QysdsFb2Empty = NewUser(`<span>[错误]:企业所得税附表2数据为空</span><br />[操作]:请重新取数后重试`)
var QysdsFb3Empty = NewUser(`<span>[错误]:企业所得税附表3数据为空</span><br />[操作]:请重新取数后重试`)

var QtsrEmpty = NewUser(`<span>[错误]:其他收入数据为空</span><br />[操作]:请重新取数后重试`)
var SljsEmpty = NewUser(`<span>[错误]:水利建设数据为空</span><br />[操作]:请重新取数后重试`)
var WhsyjsfEmpty = NewUser(`<span>[错误]:文化事业建设费数据为空</span><br />[操作]:请重新取数后重试`)
var XwsEmpty = NewUser(`<span>[错误]:财产行为税数据为空</span><br />[操作]:请重新取数后重试`)
var CbjEmpty = NewUser(`<span>[错误]:残疾人保障金数据为空</span><br />[操作]:请重新取数后重试`)
var LjclEmpty = NewUser(`<span>[错误]:垃圾处理费数据为空</span><br />[操作]:请重新取数后重试`)

// 登录相关
var LoginTelEmpty = NewUser(`<span>[错误]:报税手机号为空</span><br />[操作]:请填写后重试`)
var LoginZrridnoEmpty = NewUser(`<span>[错误]:办税人/自然人身份证号为空</span><br />[操作]:请填写后重试`)
var LoginZrrmmEmpty = NewUser(`<span>[错误]:办税人/自然人密码为空</span><br />[操作]:请填写后重试`)
var LoginXzsfEmpty = NewUser(`<span>[错误]:办税人的身份为空</span><br />[操作]:请填写后重试`)
var LoginPasswdError = NewUserV3("账号或密码错误！", "请在“企业信息”修改为正确信息后重试！")
var LoginRelationError = NewUserV3("办税人登录信息与企业无关联关系", "建议使用法定代表人身份登录或在电子税局添加该办税人与该企业关联关系")
