import os


BASE_DIR = os.path.dirname(os.path.abspath(__file__))

DATA_DIR = os.path.join(BASE_DIR, 'data')
RAW_DATA_DIR = os.path.join(DATA_DIR, 'raw')
PROCESSED_DATA_DIR = os.path.join(DATA_DIR, 'processed')
MODELS_DIR = os.path.join(BASE_DIR, 'models')
SHAP_CACHE_DIR = os.path.join(MODELS_DIR, 'shap_cache')

RAW_DATA_FILENAME = 'china_enterprise_absence_events.csv'
RAW_DATA_PATH = os.path.join(RAW_DATA_DIR, RAW_DATA_FILENAME)
CLEAN_DATA_PATH = os.path.join(PROCESSED_DATA_DIR, 'clean_data.csv')

RF_MODEL_PATH = os.path.join(MODELS_DIR, 'rf_model.pkl')
XGB_MODEL_PATH = os.path.join(MODELS_DIR, 'xgb_model.pkl')
KMEANS_MODEL_PATH = os.path.join(MODELS_DIR, 'kmeans_model.pkl')
SCALER_PATH = os.path.join(MODELS_DIR, 'scaler.pkl')
ENCODER_PATH = os.path.join(MODELS_DIR, 'encoder.pkl')

CSV_SEPARATOR = ','
RANDOM_STATE = 42
TEST_SIZE = 0.2

TARGET_COLUMN = '缺勤时长（小时）'
EMPLOYEE_ID_COLUMN = '员工编号'
COMPANY_ID_COLUMN = '企业编号'
EVENT_SEQUENCE_COLUMN = '事件序号'
EVENT_DATE_INDEX_COLUMN = '事件日期索引'

WEEKDAY_NAMES = {
    1: '周一',
    2: '周二',
    3: '周三',
    4: '周四',
    5: '周五',
    6: '周六',
    7: '周日',
}

SEASON_NAMES = {
    1: '冬季',
    2: '春季',
    3: '夏季',
    4: '秋季',
}

INDUSTRY_NAMES = [
    '制造业',
    '互联网',
    '零售连锁',
    '物流运输',
    '金融服务',
    '医药健康',
    '建筑工程',
]

LEAVE_TYPE_NAMES = [
    '病假',
    '事假',
    '年假',
    '调休',
    '婚假',
    '丧假',
    '产检育儿假',
    '工伤假',
    '其他',
]

REASON_CATEGORY_NAMES = [
    '身体不适',
    '家庭事务',
    '子女照护',
    '交通受阻',
    '突发事件',
    '职业疲劳',
    '就医复查',
]

FEATURE_NAME_CN = {
    '企业编号': '企业编号',
    '所属行业': '所属行业',
    '企业规模': '企业规模',
    '所在城市等级': '所在城市等级',
    '用工类型': '用工类型',
    '部门条线': '部门条线',
    '岗位序列': '岗位序列',
    '岗位级别': '岗位级别',
    '员工编号': '员工编号',
    '性别': '性别',
    '年龄': '年龄',
    '司龄年数': '司龄年数',
    '最高学历': '最高学历',
    '婚姻状态': '婚姻状态',
    '是否本地户籍': '是否本地户籍',
    '子女数量': '子女数量',
    '是否独生子女家庭负担': '独生子女家庭负担',
    '居住类型': '居住类型',
    '班次类型': '班次类型',
    '是否夜班岗位': '是否夜班岗位',
    '月均加班时长': '月均加班时长',
    '近30天出勤天数': '近30天出勤天数',
    '近90天缺勤次数': '近90天缺勤次数',
    '近180天请假总时长': '近180天请假总时长',
    '通勤时长分钟': '通勤时长分钟',
    '通勤距离公里': '通勤距离公里',
    '是否跨城通勤': '是否跨城通勤',
    '绩效等级': '绩效等级',
    '近12月违纪次数': '近12月违纪次数',
    '团队人数': '团队人数',
    '直属上级管理跨度': '直属上级管理跨度',
    'BMI': 'BMI',
    '是否慢性病史': '是否慢性病史',
    '年度体检异常标记': '年度体检异常',
    '近30天睡眠时长均值': '睡眠时长',
    '每周运动频次': '运动频次',
    '是否吸烟': '是否吸烟',
    '是否饮酒': '是否饮酒',
    '心理压力等级': '心理压力等级',
    '是否长期久坐岗位': '是否久坐岗位',
    '缺勤月份': '缺勤月份',
    '星期几': '星期几',
    '是否节假日前后': '节假日前后',
    '季节': '季节',
    '请假申请渠道': '请假申请渠道',
    '请假类型': '请假类型',
    '请假原因大类': '请假原因大类',
    '是否提供医院证明': '医院证明',
    '是否临时请假': '临时请假',
    '是否连续缺勤': '连续缺勤',
    '前一工作日是否加班': '前一工作日加班',
    '事件日期': '事件日期',
    '事件日期索引': '事件日期索引',
    '事件序号': '事件序号',
    '员工历史事件数': '员工历史事件数',
    '缺勤时长（小时）': '缺勤时长',
    '加班通勤压力指数': '加班通勤压力指数',
    '家庭负担指数': '家庭负担指数',
    '健康风险指数': '健康风险指数',
    '岗位稳定性指数': '岗位稳定性指数',
    '节假日风险标记': '节假日风险标记',
    '排班压力标记': '排班压力标记',
    '缺勤历史强度': '缺勤历史强度',
    '生活规律指数': '生活规律指数',
    '管理负荷指数': '管理负荷指数',
    '工龄分层': '工龄分层',
    '年龄分层': '年龄分层',
    '通勤分层': '通勤分层',
    '加班分层': '加班分层',
    # JD-R 工作要求维度
    '工作自主性': '工作自主性',
    '情绪劳动强度': '情绪劳动强度',
    '时间压力感知': '时间压力感知',
    '角色模糊度': '角色模糊度',
    '工作家庭冲突': '工作家庭冲突',
    # JD-R 工作资源维度
    '上级支持': '上级支持',
    '同事支持': '同事支持',
    '技能多样性': '技能多样性',
    '职业发展机会': '职业发展机会',
    '参与决策': '参与决策',
    '组织公平感': '组织公平感',
    # JD-R 个人资源维度
    '自我效能感': '自我效能感',
    '心理韧性': '心理韧性',
    '乐观程度': '乐观程度',
    # JD-R 中介变量
    '工作倦怠': '工作倦怠',
    '工作投入': '工作投入',
    # JD-R 复合指数
    '工作要求指数': '工作要求指数',
    '工作资源指数': '工作资源指数',
    '个人资源指数': '个人资源指数',
    'JD-R平衡度': 'JD-R平衡度',
    '倦怠风险指数': '倦怠风险指数',
    '工作投入指数': '工作投入指数',
}

# JD-R 理论维度映射
JDR_DIMENSIONS = {
    'job_demands': {
        'name_cn': '工作要求',
        'features': ['月均加班时长', '通勤时长分钟', '是否夜班岗位', '工作自主性',
                     '情绪劳动强度', '时间压力感知', '角色模糊度', '工作家庭冲突'],
    },
    'job_resources': {
        'name_cn': '工作资源',
        'features': ['工作自主性', '上级支持', '同事支持', '技能多样性',
                     '职业发展机会', '参与决策', '组织公平感'],
    },
    'personal_resources': {
        'name_cn': '个人资源',
        'features': ['自我效能感', '心理韧性', '乐观程度'],
    },
    'mediators': {
        'name_cn': '中介变量',
        'features': ['工作倦怠', '工作投入'],
    },
}

# 风险等级配置
RISK_LEVELS = {
    'low': {'max_hours': 4, 'label': '低风险', 'color': '#22c55e'},
    'medium': {'min_hours': 4, 'max_hours': 8, 'label': '中风险', 'color': '#f59e0b'},
    'high': {'min_hours': 8, 'label': '高风险', 'color': '#ef4444'},
}

# JD-R 数据版本标记
JDR_DATA_VERSION = '1.0'
