package services

import (
	"easydo-echo_win7/models"
	"fmt"
	"time"

	"github.com/jmoiron/sqlx"
)

func GetFlowNo(flow_type string, tenant_id string, conn ...*sqlx.Tx) (string, error) {
	flow_no := new(models.FlowNo)
	flow_no.Type = &flow_type
	flow_no.TenantId = &tenant_id

	if len(conn) > 0 {
		tx := conn[0]
		err := JdbcClient.GetJdbcModel(flow_no, tx)
		if err != nil {
			return "", fmt.Errorf("SQL执行失败: %v", err)
		}

	} else {
		err := JdbcClient.GetJdbcModel(flow_no)
		if err != nil {
			return "", fmt.Errorf("SQL执行失败: %v", err)
		}
	}

	// 获取当前时间
	now := time.Now()

	// 格式化日期
	currDate := now.Format("2006-01-02")
	currDate2 := now.Format("20060102")

	var no string

	// 判断是否需要重置序列号（新的一天）
	if flow_no.CurrDate == nil || len(*flow_no.CurrDate) == 0 || (len(*flow_no.CurrDate) > 0 && *flow_no.CurrDate != currDate) {
		flow_no.CurrDate = &currDate
		*flow_no.CurrSeq = 1
	} else {
		*flow_no.CurrSeq = *flow_no.CurrSeq + 1
	}

	// 生成流水号
	if len(*flow_no.CurrDate) == 0 {
		// 没有日期的情况，使用6位序列号
		currSeq := fmt.Sprintf("%06d", *flow_no.CurrSeq)
		no = *flow_no.Prefix + currSeq
	} else {
		// 有日期的情况，使用5位序列号
		currSeq := fmt.Sprintf("%05d", *flow_no.CurrSeq)
		no = *flow_no.Prefix + currDate2 + currSeq
	}

	flow_no.CurrNo = &no

	paramMap := map[string]interface{}{
		"type": flow_type,
	}

	if len(conn) > 0 {
		tx := conn[0]
		err := JdbcClient.JdbcUpdate(flow_no, paramMap, tx)
		if err != nil {
			return "", fmt.Errorf("SQL执行失败: %v", err)
		}
	} else {
		err := JdbcClient.JdbcUpdate(flow_no, paramMap)
		if err != nil {
			return "", fmt.Errorf("SQL执行失败: %v", err)
		}
	}
	return no, nil
}
