package com.gxwebsoft.ai.enums;

import lombok.Getter;

@Getter
public enum AuditReportEnum {

    // 基础信息
    TITLE(00, "审计标题"),
    BASIS(10, "一、审计依据"),
    OBJECTIVE(20, "二、审计目标"),
    SCOPE(30, "三、审计对象和范围"),
    
    // 被审计单位基本情况
    UNIT_OVERVIEW(41, "四、被审计单位基本情况-（一）单位概况"),
    ORG_PERSONNEL(42, "四、被审计单位基本情况-（二）机构和人员相关情况"),
    FINANCIAL_ACCOUNTING(43, "四、被审计单位基本情况-（三）财务会计、重大会计政策选用及变动情况"),
    ANNUAL_BUSINESS(44, "四、被审计单位基本情况-（四）审计期间合并口径年度资产负债及各项业务总体情况"),
    INTERNAL_CONTROL(45, "四、被审计单位基本情况-（五）相关内部控制"),
    
    // 审计内容和重点及审计方法
    ECONOMIC_POLICIES(51, "五、审计内容和重点及审计方法-（一）贯彻执行党和国家有关经济方针和上级决策部署情况"),
    DEV_STRATEGY(52, "五、审计内容和重点及审计方法-（二）公司发展战略规划的制定、执行和效果情况以及年度责任目标完成情况"),
    MAJOR_ECONOMIC(53, "五、审计内容和重点及审计方法-（三）重大经济事项的决策、执行和效果情况"),
    CORP_GOVERNANCE(54, "五、审计内容和重点及审计方法-（四）公司法人治理结构的建立、健全和运行情况，内部控制制度的制定和执行情况"),
    FINANCIAL_LEGAL(55, "五、审计内容和重点及审计方法-（五）公司财务的真实合法效益情况，风险管控情况，境外资产管理情况"),
    INTEGRITY_COMPLIANCE(56, "五、审计内容和重点及审计方法-（六）在经济活动中落实有关党风廉政建设责任和遵守廉洁从业规定情况"),
    PREV_AUDIT_ISSUES(57, "五、审计内容和重点及审计方法-（七）对以往审计中发现问题的整改情况"),
    OTHER_MATTERS(58, "五、审计内容和重点及审计方法-（八）其他需要审计的事项"),


    // 重要风险的识别及应对
    RISK_IDENTIFY(61, "六、重要风险的识别及应对-（一）重要风险的识别"),
    RISK_RESPONSE(62, "六、重要风险的识别及应对-（二）风险的应对策略"),

    // 其他部分
    TECHNIQUES(70, "七、审计技术方法"),
    SCHEDULE(80, "八、工作步骤与时间安排"),
    ORGANIZATION(90, "九、审计工作的组织实施");

    private final Integer code;
    private final String desc;

    AuditReportEnum(Integer code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public String getCodeStr() {
        return String.format("%02d", code);
    }

    public static AuditReportEnum getByCode(Integer code) {
        for (AuditReportEnum value : values()) {
            if (value.code.equals(code)) {
                return value;
            }
        }
        return null;
    }
    
    /**
     * 根据代码获取描述信息
     */
    public static String getDescByCode(Integer code) {
        AuditReportEnum enumValue = getByCode(code);
        return enumValue != null ? enumValue.getDesc() : null;
    }
    
    /**
     * 根据代码获取枚举名称
     */
    public static String getNameByCode(Integer code) {
        AuditReportEnum enumValue = getByCode(code);
        return enumValue != null ? enumValue.name() : null;
    }
    
    /**
     * 根据代码获取标题部分（不带序号）
     */
    public static String getTitleByCode(Integer code) {
        AuditReportEnum enumValue = getByCode(code);
        if (enumValue == null) return null;
        
        String desc = enumValue.getDesc();
        int lastDashIndex = desc.lastIndexOf("-");
        if (lastDashIndex > 0) {
            return desc.substring(lastDashIndex + 1);
        }
        return desc;
    }
    
    /**
     * 根据代码获取完整路径（带序号）
     */
    public static String getFullPathByCode(Integer code) {
        AuditReportEnum enumValue = getByCode(code);
        return enumValue != null ? enumValue.getDesc() : null;
    }
}