package taxerr

import (
	"fmt"
	"git.listensoft.net/tool/jspkit/common/variable"
)

// ================================================ 错误类 ==============================================================

// NoResultError 本次申报未查询到结果
func NoResultError(retry bool) *UserErr {
	if retry {
		return NewUserV3("本次提交申报后，未获取到税局页面返回的申报结果", "请您稍后发起任务核实！系统将于30分钟后重试(可在\"通用设置\"关闭)")
	} else {
		return NewUserV3("本次提交申报后，未获取到税局页面返回的申报结果", "请您稍后发起任务核实！(可在\"通用设置\"配置自动重试)")
	}
}

// TaxServiceUnavailable 税局--您当前访问的服务暂时不可用
func TaxServiceUnavailable(retry bool) *UserErr {
	if retry {
		return NewUserV3("[税局提示]您当前访问的服务暂时不可用", "请稍后再试！系统将于30分钟后重试(可在\"通用设置\"关闭)")
	} else {
		return NewUserV3("[税局提示]您当前访问的服务暂时不可用", "请稍后再试！(可在\"通用设置\"配置自动重试)")
	}
}

// ================================================ 财报类 ==============================================================

// AccountingStandardsError 会计准则错误 systemAcc: 系统准则 bureauAcc: 税局准则
func AccountingStandardsError(systemAcc, bureauAcc string) *UserErr {
	return NewUserV3(`会计准则不一致，系统准则为`+systemAcc+`，税局准则为`+bureauAcc, `请在“企业信息”修改后重试！`)
}

// AccountingStandardsNotSupport 不支持的会计准则
func AccountingStandardsNotSupport(systemAcc variable.Kjze) *UserErr {
	return NewUserV3(fmt.Sprintf("暂不支持【%s】的财报申报", systemAcc), `请检查会计准则是否正确或联系运维人员处理！`)
}

// FinancialStatementsError 财务报表错误
func FinancialStatementsError(accountingStandard variable.Kjze, sheetName string) *UserErr {
	return NewUserV3(fmt.Sprintf(`【%s】【%s】有误`, accountingStandard, sheetName), `请重新计提！`)
}

// ================================================ 异常类 ==============================================================

// LoadError 未正常加载
func LoadError(element string, retry bool) *SystemErr {
	if retry {
		return New(fmt.Sprintf(`【%s】因数据卡顿未正常加载, 系统将于30分钟后重试(可在"通用设置"关闭)`, element))
	} else {
		return New(fmt.Sprintf(`【%s】因数据卡顿未正常加载, (可在"通用设置"配置自动重试)`, element))
	}
}

// ================================================ 发票类 ==============================================================

func LoginHasBeenBlockedAndTakenOffline(Cscsts bool) *UserErr {
	if Cscsts {
		return NewUserV3("检测到他人登录电子税局,账号被顶下线导致任务中断", "任务进行时请勿登录电子税局！系统将于30分钟后重试(可在\"通用设置\"关闭)")
	} else {
		return NewUserV3("检测到他人登录电子税局,账号被顶下线导致任务中断", "任务进行时请勿登录电子税局！(可在\"通用设置\"配置自动重试)")
	}
}

// ================================================= 登陆类 -扫码==========================================================

// PasswdLockError 账号或密码错误，输入次数过多，税局已锁定
var PasswdLockError = NewUserV3("账号或密码错误，输入次数过多，税局已锁定！", "请在税局修改密码后重新登录或在“企业信息”修改为正确信息后次日发起任务！")

// PasswdError 输入的个人账号、密码或报税手机号错误，请重新输入
var PasswdError = NewUserV3("登录税局个人密码错误！", "请在“企业信息”修改后重试！")

// TelUnMatch 税局手机号和系统报税手机号不一致
var TelUnMatch = NewUserV3(`报税手机号填写错误！`, `请核实“企业信息”填写的报税手机号是否正确！`)

var TelSmsOverrun = NewUser("短信发送次数超限")

var TelSmsError = NewUser("输入的短信验证码错误")

// PasswdEmpty 密码为空
var PasswdEmpty = NewUserV3(`未填写密码`, `请在“企业信息”填写后重新发起`)

// TelEmpty 手机号为空
var TelEmpty = NewUserV3(`未填写报税手机号`, `请在“企业信息”填写后重新发起`)

// TelError TelEmpty 手机号有误或格式不对
var TelError = NewUserV3(`报税手机号有误或格式不对`, `请在“企业信息”修改后重新发起`)

// TaxNoError 税号错误
var TaxNoError = NewUserV3(`输入的纳税人识别号错误`, `请在“企业信息”修改后重试`)

// CompanyNameChanged 公司名变了
func CompanyNameChanged(Name string) *UserErr {
	return NewUserV3(`申报过程公司名称发生变化，税局内名称为：`+Name, `请在手动核实`)
}

// DlTaxNoError 税号错误
var DlTaxNoError = NewUserV3(`代理机构号为空`, `请在“授权管理”修改后重试`)

// InputSmsError 输入的验证码错误
var InputSmsError = NewUserV3("输入的短信验证码错误", "请稍后重试")

// InputSmsExpiredError InputSmsExpired 短信验证码过期或失效
var InputSmsExpiredError = NewUserV3("验证码已失效", "请重新授权")

// SmsCodeNotReceivedError 没接收到验证码
var SmsCodeNotReceivedError = NewUserV3(`手机验证码接收失败`, `请检查短信转发设备是否正常，可在“订单管理”购买设备。`)

// SmsUnOnline 手机号没心跳不在线
var SmsUnOnline = NewUserV3(`手机号不在线`, `请检查短信转发设备或短信助手app是否正常`)

// SmsTransfinite 短信发送次数超限
var SmsTransfinite = NewUserV3(`短信发送次数超限。`, `请次日再重新发起任务`)

// ComIrrelevantRelationError 未查询到您与该企业的关联关系信息
var ComIrrelevantRelationError = NewUserV3("办税人登录信息与企业无关联关系。", "建议使用法定代表人身份登录或在电子税局添加该办税人与该企业关联关系！")

// UnRegisteredError 用户未注册，请在自然人业务入口进行用户注册
var UnRegisteredError = NewUserV3("该用户未注册。", "在电子税局自然人业务入口进行用户注册后重试。")

// TelOffline 请调用发送验证码｜您的登录已掉线
var TelOffline = NewUserV3("您的登录已掉线！", "请在“授权登录”页重新点击【授权】后再次发起任务!")

var NonsupportOldLogin = NewUserV3("该地区电子税局已不再支持旧版登录。", `请在“企业信息”切换新版登录方式。`)

// TelNotFundInTax 手机号码不存在，您可以尝试使用证件号码登录
var TelNotFundInTax = NewUserV3(`登录税局手机号码不存在`, `请在“企业信息”里修改正确后重试！`)

// TaxNotMatch 接口返回：输入的个人账号、密码或报税手机号错误，请重新输入
var TaxNotMatch = NewUserV3(`输入的个人账号、密码或报税手机号错误，请重新输入！`, `请在“企业信息”里修改正确后重试！`)

// FaceVerifyError 确认成为该企业办税人失败，请在网站自行扫脸验证确认后使用
var FaceVerifyError = NewUserV3(`确认成为该企业办税人失败`, `请在网站自行扫脸验证确认后使用`)

var CompanyNotFund = NewUserV3("未在当前代理手机号下找到该公司", "请确认是否绑定办税员")

// PasswdAlwaysError 密码输入连续错误x次
func PasswdAlwaysError(msg string) error {
	return NewUserV3(msg, "请在“企业信息”修改后重试！")
}

func CompanyNameError(name string) error {
	return NewUserV3(`企业名称与税局不符，税局内名称为：`+name, `请在“企业信息”里修改企业名称`)
}

// TaxAbnormalError 登陆服务异常
func TaxAbnormalError(Cscsts bool) error {
	if Cscsts {
		return NewSystemV3("税局登录服务异常。", "系统将于30分钟后重试(可在\"通用设置\"关闭)")
	} else {
		return NewSystemV3("税局登录服务异常。", "请稍后重试(可在\"通用设置\"配置自动重试)")
	}
}

var KeepTimeOut = New("网络超时，请稍后再试")

var KeepTimeOutArea = map[string]bool{
	"chongqing": true,
}

func NonsupportLogin(method string) error {
	if method != "" {
		return NewUserV3(fmt.Sprintf("“%s”暂不支持此登录方式", method), "请在企业信息”修改后重试！")
	}
	return NewUserV3("暂不支持的登录方式", "请在“企业信息”修改后重试！")
}

var TaxRzDkErr = NewUserV3("办税人授权权限不够", "请重新授权登录后发起任务")

// ================================================ 社保类 ==============================================================

// SheBaoNotFoundErr 全部位置都查不到社保信息（已申报和待申报）
var SheBaoNotFoundErr = NewUserV3("待申报和已申报页面均未查询到社保信息", "请确认参保信息后重试。")

// SheBaoUnreported 存在往期未申报
var SheBaoUnreported = NewUserV3("您当前存在历史属期的费款未申报", "可在设置中选择申报往期社保或手动处理")

// SheBaoPaymentInfoNotFound 未查询到待缴款信息
var SheBaoPaymentInfoNotFound = NewUserV3("未查询到待缴款信息", "请确认申报状态。")

// SheBaoUnbindAgreement 未绑定三方协议
var SheBaoUnbindAgreement = NewUserV3("该企业未绑定三方协议", "请前往电子税局绑定三方协议后重试。")

// ================================================ 银行类 ==============================================================

// BankWebStuckErr 银行页面卡顿
func BankWebStuckErr(retryFlag bool) *SystemErr {
	if retryFlag {
		return New("银行页面卡顿，系统将于30分钟后重试(可在\"通用设置\"关闭)")
	} else {
		return New("银行页面卡顿，系统将于30分钟后重试(可在\"通用设置\"配置自动重试)")
	}
}
