<template>
    <view class="publish-job-page">
        <!-- 头部导航 -->
        <view class="header">
            <view class="header-left" @click="goBack">
                <image src="@/static/icon/back.png" class="back-icon"></image>
            </view>
            <view class="header-title">发布岗位</view>
            <view class="header-right"></view>
        </view>

        <!-- 主要内容 -->
        <scroll-view class="content" scroll-y="true" :style="{ height: scrollViewHeight }" :scroll-with-animation="true">
            <!-- 基本信息区块 -->
            <view class="form-block">
                <view class="form-group">
                    <view class="label">岗位名称</view>
                    <input 
                        class="input" 
                        placeholder="请输入岗位名称" 
                        v-model="formData.jobTitle"
                    />
                </view>
                <view class="form-group" v-if="userType === 0">
                    <view class="label">招聘公司</view>
                    <input 
                        class="input" 
                        placeholder="请输入招聘公司" 
                        v-model="formData.companyName"
                    />
                </view>
                <view class="form-group" v-if="userType === 2">
                    <view class="label">招聘公司</view>
                    <!-- 企业用户：直接输入 -->
                    <input 
                        v-if="userType === 1"
                        class="input" 
                        placeholder="请输入公司名称" 
                        v-model="formData.companyName"
                    />
                    <!-- 网格员：点击跳转搜索 -->
                    <view 
                        v-else
                        class="company-selector"
                        @click="goToCompanySearch"
                    >
                        <view class="selector-text" :class="{ 'placeholder': !formData.companyName }">
                            {{ formData.companyName || '请选择企业' }}
                        </view>
                        <view class="selector-arrow">
                            <view class="arrow-icon">›</view>
                        </view>
                    </view>
                </view>
                <view class="form-group">
                    <view class="label">最小薪资 (元/月)</view>
                    <input 
                        class="input" 
                        placeholder="请输入最小薪资" 
                        type="number"
                        v-model="formData.minSalary"
                    />
                </view>
                <view class="form-group">
                    <view class="label">最大薪资 (元/月)</view>
                    <input 
                        class="input" 
                        placeholder="请输入最大薪资" 
                        type="number"
                        v-model="formData.maxSalary"
                    />
                </view>
                <view class="form-group">
                    <view class="label">学历要求</view>
                    <picker 
                        mode="selector" 
                        :range="educationLevels" 
                        range-key="label"
                        @change="onEducationChange"
                        class="picker"
                    >
                        <view class="picker-text" data-placeholder="请选择学历要求">{{ selectedEducation || '请选择学历要求' }}</view>
                    </picker>
                </view>
                <view class="form-group">
                    <view class="label">工作经验</view>
                    <picker 
                        mode="selector" 
                        :range="experienceLevels" 
                        range-key="label"
                        @change="onExperienceChange"
                        class="picker"
                    >
                        <view class="picker-text" data-placeholder="请选择工作经验">{{ selectedExperience || '请选择工作经验' }}</view>
                    </picker>
                </view>
                <view class="form-group">
                    <view class="label">工作区县</view>
                    <picker 
                        mode="selector" 
                        :range="workDistricts" 
                        range-key="label"
                        @change="onWorkDistrictChange"
                        class="picker"
                    >
                        <view class="picker-text" data-placeholder="请选择工作区县">{{ selectedWorkDistrict || '请选择工作区县' }}</view>
                    </picker>
                </view>
                <view class="form-group">
                    <view class="label">招聘人数</view>
                    <input 
                        class="input" 
                        placeholder="请输入招聘人数" 
                        type="number"
                        v-model="formData.recruitCount"
                    />
                </view>
                <view class="form-group">
                    <view class="label">工作地点</view>
                    <view class="location-input-container">
                        <input 
                            class="input location-input" 
                            placeholder="请输入具体工作地址" 
                            v-model="formData.jobLocation"
                        />
                        <view class="location-btn" @click="chooseLocation">
                            <text class="location-btn-text">选择位置</text>
                        </view>
                    </view>
                </view>
                <view class="form-group">
                    <view class="label">岗位分类</view>
                    <picker 
                        mode="selector" 
                        :range="jobCategories" 
                        range-key="label"
                        @change="onJobCategoryChange"
                        class="picker"
                    >
                        <view class="picker-text" data-placeholder="请选择岗位分类">{{ selectedJobCategory || '请选择岗位分类' }}</view>
                    </picker>
                </view>
            </view>

            <!-- 岗位描述区块 -->
            <view class="form-block">
                <view class="section-title">岗位描述</view>
                <view class="form-group">
                    <textarea 
                        class="textarea" 
                        placeholder="请详细描述岗位职责和工作内容"
                        v-model="formData.description"
                    ></textarea>
                </view>
            </view>

            <!-- 任职要求区块 -->
            <view class="form-block">
                <view class="section-title">任职要求</view>
                <view class="form-group">
                    <textarea 
                        class="textarea" 
                        placeholder="请描述对候选人的具体要求"
                        v-model="formData.jobRequirements"
                    ></textarea>
                </view>
            </view>

            <!-- 联系方式区块 -->
            <view class="form-block">
                <view class="section-title">联系方式</view>
                <view class="contacts-container">
                    <view 
                        class="contact-item" 
                        v-for="(contact, index) in formData.contacts" 
                        :key="index"
                    >
                        <view class="contact-header">
                            <view class="contact-title">联系人 {{ index + 1 }}</view>
                            <view 
                                class="delete-btn" 
                                v-if="formData.contacts.length > 1"
                                @click="removeContact(index)"
                            >
                                删除
                            </view>
                        </view>
                        <view class="form-group">
                            <view class="label">联系人姓名</view>
                            <input 
                                class="input" 
                                placeholder="请输入联系人姓名" 
                                v-model="contact.name"
                            />
                        </view>
                        <view class="form-group">
                            <view class="label">联系电话</view>
                            <input 
                                class="input" 
                                placeholder="请输入联系电话" 
                                v-model="contact.phone"
                            />
                        </view>
                    </view>
                </view>
                <view class="add-contact-btn" v-if="formData.contacts.length < 3" @click="addContact">
                    <view class="add-icon">+</view>
                    <view class="add-text">添加联系人</view>
                </view>
            </view>
            
            <!-- 底部安全区域 -->
            <view class="bottom-safe-area"></view>
        </scroll-view>

        <!-- 底部操作按钮 -->
        <view class="footer">
            <view class="btn-group">
                <button class="btn btn-cancel" @click="goBack">取消</button>
                <button class="btn btn-publish" @click="publishJob">发布岗位</button>
            </view>
        </view>
    </view>
</template>

<script setup>
import { ref, reactive, onMounted, onUnmounted } from 'vue';
import { storeToRefs } from 'pinia';
import { createRequest } from '@/utils/request';
import useDictStore from '@/stores/useDictStore';
import useUserStore from '@/stores/useUserStore';
const userStore = useUserStore();
const cachedUserInfo = uni.getStorageSync('userInfo') || {};
// 表单数据
const formData = reactive({
    jobTitle: '',
    companyName: '',
    minSalary: '',
    maxSalary: '',
    recruitCount: '', // 对应接口字段 idCardPictureBackUrl
    description: '', // 对应接口字段 description
    jobRequirements: '',
    jobCategory: '', // 新增：岗位分类
    companyId: '', // 新增：企业id
    latitude: '', // 新增：纬度
    longitude: '', // 新增：经度
    jobLocation: '', // 新增：工作地点
    jobLocationAreaCode: '', // 新增：工作地点区县字典代码
    education: '', // 新增：学历要求字典值
    experience: '', // 新增：工作经验字典值
    contacts: [
        {
            name: '',
            phone: ''
        }
    ]
});

// 字典存储
const dictStore = useDictStore();

// 选择器数据
const educationLevels = ref([]);
const experienceLevels = ref([]);
const workDistricts = ref([]);
const workLocations = ref([]);
const jobCategories = ref([]); // 新增：岗位分类选项

// 选中的值
const selectedEducation = ref('');
const selectedExperience = ref('');
const selectedWorkDistrict = ref('');
const selectedWorkLocation = ref('');
const selectedJobCategory = ref('');

// 滚动视图高度
const scrollViewHeight = ref('calc(100vh - 200rpx)');

// 计算滚动视图高度
const calculateScrollViewHeight = () => {
    const systemInfo = uni.getSystemInfoSync();
    const windowHeight = systemInfo.windowHeight;
    const headerHeight = 100; // 头部高度
    const footerHeight = 120; // 底部按钮高度
    const scrollHeight = windowHeight - headerHeight - footerHeight;
    scrollViewHeight.value = `${scrollHeight}px`;
};
const userType = ref(Number(userStore.userInfo.isCompanyUser));
console.log('完整userInfo对象:---223--', userType.value);
// 页面加载时计算高度和初始化数据
onMounted(async () => {
    
    console.log('完整userInfo对象:-----', );
    console.log('缓存中的userInfo:----', cachedUserInfo);
    calculateScrollViewHeight();
    await initFormData();
    
    // 监听企业选择事件
    uni.$on('companySelected', handleCompanySelected);
});

// 页面卸载时移除事件监听
onUnmounted(() => {
    uni.$off('companySelected', handleCompanySelected);
});

// 初始化表单数据
const initFormData = async () => {
    try {
        // 获取字典数据
        await dictStore.getDictData();
        
        // 设置学历选项
        educationLevels.value = dictStore.state.education;
        
        // 设置工作经验选项
        experienceLevels.value = dictStore.state.experience;
        
        // 设置区县选项（从字典获取）
        workDistricts.value = dictStore.state.area;
        
        // 设置岗位分类选项
        jobCategories.value = [
            { label: '普通', value: '1' },
            { label: '零工', value: '2' },
            { label: '实习实训', value: '3' }
        ];
        
        // 设置企业ID（从用户信息获取）
        if (userStore.userInfo && userStore.userInfo.id) {
            formData.companyId = userStore.userInfo.id;
        }
        
    } catch (error) {
        console.error('初始化表单数据失败:', error);
        uni.showToast({
            title: '数据加载失败',
            icon: 'none'
        });
    }
};

// 选择器事件处理
const onEducationChange = (e) => {
    const index = e.detail.value;
    const selectedItem = educationLevels.value[index];
    selectedEducation.value = selectedItem.label;
    formData.education = selectedItem.value;
};

const onExperienceChange = (e) => {
    const index = e.detail.value;
    const selectedItem = experienceLevels.value[index];
    selectedExperience.value = selectedItem.label;
    formData.experience = selectedItem.value;
};

const onWorkDistrictChange = (e) => {
    const index = e.detail.value;
    const selectedItem = workDistricts.value[index];
    selectedWorkDistrict.value = selectedItem.label;
    formData.jobLocationAreaCode = selectedItem.value;
};

const onJobCategoryChange = (e) => {
    const index = e.detail.value;
    const selectedItem = jobCategories.value[index];
    selectedJobCategory.value = selectedItem.label;
    formData.jobCategory = selectedItem.value;
};

// 选择位置
const chooseLocation = () => {
    uni.chooseLocation({
        success: (res) => {
            formData.jobLocation = res.address;
            formData.latitude = res.latitude.toString();
            formData.longitude = res.longitude.toString();
        },
        fail: (err) => {
            console.error('选择位置失败:', err);
            uni.showToast({
                title: '获取位置失败',
                icon: 'none'
            });
        }
    });
};

// 添加联系人
const addContact = () => {
    if (formData.contacts.length < 3) {
        formData.contacts.push({
            name: '',
            phone: ''
        });
    }
};

// 删除联系人
const removeContact = (index) => {
    if (formData.contacts.length > 1) {
        formData.contacts.splice(index, 1);
    }
};

// 跳转到企业搜索页面
const goToCompanySearch = () => {
    uni.navigateTo({
        url: '/pages/job/companySearch'
    });
};

// 处理企业选择
const handleCompanySelected = (company) => {
    formData.companyName = company.name;
    formData.companyId = company.id;
};

// 返回上一页
const goBack = () => {
    uni.navigateBack();
};

// 发布岗位
const publishJob = async () => {
    // 表单验证
    if (!validateForm()) {
        return;
    }

    try {
        uni.showLoading({
            title: '发布中...'
        });

        // 构建请求数据
        const requestData = {
            jobTitle: formData.jobTitle,
            minSalary: formData.minSalary,
            maxSalary: formData.maxSalary,
            education: formData.education,
            experience: formData.experience,
            jobLocation: formData.jobLocation,
            jobLocationAreaCode: formData.jobLocationAreaCode,
            idCardPictureBackUrl: formData.recruitCount, // 招聘人数
            latitude: formData.latitude,
            longitude: formData.longitude,
            description: formData.description,
            jobCategory: formData.jobCategory,
            companyId: formData.companyId,
            companyName: formData.companyName,
            jobContactList: formData.contacts.filter(contact => contact.name.trim() && contact.phone.trim())
        };

        // 调用发布接口
        const response = await createRequest('/app/job/publishJob', requestData, 'POST', false);
        
        uni.hideLoading();
        
        if (response.code === 200) {
            uni.showToast({
                title: '发布成功',
                icon: 'success'
            });
            
            // 延迟返回
            setTimeout(() => {
                goBack();
            }, 1500);
        } else {
            uni.showToast({
                title: response.msg || '发布失败',
                icon: 'none'
            });
        }
        
    } catch (error) {
        uni.hideLoading();
        console.error('发布岗位失败:', error);
        uni.showToast({
            title: '发布失败，请重试',
            icon: 'none'
        });
    }
};

// 表单验证
const validateForm = () => {
    // 必填字段验证
    const requiredFields = [
        { field: 'jobTitle', message: '请输入岗位名称' },
        { field: 'companyName', message: '请输入公司名称' },
        { field: 'minSalary', message: '请输入最小薪资' },
        { field: 'maxSalary', message: '请输入最大薪资' },
        { field: 'education', message: '请选择学历要求' },
        { field: 'experience', message: '请选择工作经验' },
        { field: 'jobLocation', message: '请选择工作地点' },
        { field: 'jobLocationAreaCode', message: '请选择工作区县' },
        { field: 'recruitCount', message: '请输入招聘人数' },
        { field: 'description', message: '请输入岗位描述' },
        { field: 'jobCategory', message: '请选择岗位分类' }
    ];

    for (const { field, message } of requiredFields) {
        if (!formData[field] || formData[field].toString().trim() === '') {
            uni.showToast({
                title: message,
                icon: 'none'
            });
            return false;
        }
    }

    // 薪资验证
    const minSalary = parseFloat(formData.minSalary);
    const maxSalary = parseFloat(formData.maxSalary);
    
    if (minSalary >= maxSalary) {
        uni.showToast({
            title: '最大薪资必须大于最小薪资',
            icon: 'none'
        });
        return false;
    }

    // 验证联系人信息
    for (let i = 0; i < formData.contacts.length; i++) {
        const contact = formData.contacts[i];
        if (!contact.name.trim()) {
            uni.showToast({
                title: `请输入第${i + 1}个联系人姓名`,
                icon: 'none'
            });
            return false;
        }
        if (!contact.phone.trim()) {
            uni.showToast({
                title: `请输入第${i + 1}个联系人电话`,
                icon: 'none'
            });
            return false;
        }
    }

    return true;
};
</script>

<style lang="scss" scoped>
.publish-job-page {
    height: 100vh;
    background-color: #f5f5f5;
    display: flex;
    flex-direction: column;
    position: relative;
    overflow: hidden;
}

.header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 20rpx 30rpx;
    background: #fff;
    border-bottom: 1rpx solid #eee;
    
    .header-left {
        width: 60rpx;
        height: 60rpx;
        display: flex;
        align-items: center;
        justify-content: center;
        
        .back-icon {
            width: 40rpx;
            height: 40rpx;
        }
    }
    
    .header-title {
        font-size: 36rpx;
        font-weight: 600;
        color: #333;
    }
    
    .header-right {
        width: 60rpx;
    }
}

.content {
    flex: 1;
    padding: 0;
    overflow: hidden;
}

.form-block {
    background: #fff;
    margin-bottom: 20rpx;
    width: 100%;
    position: relative;
    padding-bottom: 10rpx;
    &:last-child {
        margin-bottom: 0;
    }
    
    .section-title {
        font-size: 32rpx;
        font-weight: 600;
        color: #333;
        margin-bottom: 30rpx;
        padding: 30rpx 30rpx 20rpx 30rpx;
        border-bottom: 2rpx solid #f0f0f0;
    }
}

.form-group {
    margin-bottom: 0;
    padding: 0 30rpx;
    border-bottom: 2rpx solid #f0f0f0;
    
    &:last-child {
        border-bottom: none;
        padding-bottom: 30rpx;
    }
    
    .label {
        font-size: 28rpx;
        color: #000;
        margin-bottom: 15rpx;
        font-weight: 400;
        padding-top: 30rpx;
    }
    
    .input {
        width: 100%;
        height: 80rpx;
        background: #fff;
        border: none;
        border-radius: 0;
        padding: 0 0 20rpx 0;
        font-size: 28rpx;
        color: #333;
        position: relative;
        z-index: 1;
        box-sizing: border-box;
        line-height: 1.4;
        display: flex;
        align-items: center;
        
        &::placeholder {
            color: #999;
            font-size: 28rpx;
            line-height: 1.4;
        }
        
        &:focus {
            background: #fff;
            transform: translateZ(0);
            -webkit-transform: translateZ(0);
        }
    }
    
    .textarea {
        width: 100%;
        min-height: 120rpx;
        background: #fff;
        border: none;
        border-radius: 0;
        padding: 0 0 20rpx 0;
        font-size: 28rpx;
        color: #333;
        position: relative;
        z-index: 1;
        box-sizing: border-box;
        line-height: 1.4;
        
        &::placeholder {
            color: #999;
            font-size: 28rpx;
            line-height: 1.4;
        }
        
        &:focus {
            background: #fff;
            transform: translateZ(0);
            -webkit-transform: translateZ(0);
        }
    }
    
    .picker {
        width: 100%;
        height: 80rpx;
        background: #fff;
        border: none;
        border-radius: 0;
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 0 0 20rpx 0;
        box-sizing: border-box;
        
        .picker-text {
            font-size: 28rpx;
            color: #333;
            
            &:empty::before {
                content: attr(data-placeholder);
                color: #999;
                font-size: 24rpx;
            }
        }
        
        &::after {
            content: '';
            width: 0;
            height: 0;
            border-left: 8rpx solid transparent;
            border-right: 8rpx solid transparent;
            border-top: 8rpx solid #999;
        }
    }
}

// 企业选择器样式
.company-selector {
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 80rpx;
    background: #fff;
    border: none;
    border-radius: 0;
    padding: 0 0 20rpx 0;
    box-sizing: border-box;
    
    .selector-text {
        font-size: 28rpx;
        color: #333;
        
        &.placeholder {
            color: #999;
            font-size: 24rpx;
        }
    }
    
    .selector-arrow {
        width: 40rpx;
        height: 40rpx;
        display: flex;
        align-items: center;
        justify-content: center;
        
        .arrow-icon {
            font-size: 24rpx;
            color: #999;
        }
    }
    
    &:active {
        background: #f8f8f8;
    }
}

// 联系人管理样式
.contacts-container {
    .contact-item {
        margin-bottom: 30rpx;
        padding: 0 30rpx;
        background: #fff;
        border-radius: 12rpx;
        
        &:last-child {
            margin-bottom: 0;
        }
        
        .contact-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 20rpx 0 10rpx 0;
            border-bottom: 1rpx solid #eee;
            margin-bottom: 20rpx;
            
            .contact-title {
                font-size: 28rpx;
                font-weight: 600;
                color: #333;
            }
            
            .delete-btn {
                font-size: 24rpx;
                color: #ff4757;
                padding: 8rpx 16rpx;
                background: #fff;
                border: 1rpx solid #ff4757;
                border-radius: 6rpx;
                
                &:active {
                    background: #ff4757;
                    color: #fff;
                }
            }
        }
        
        .form-group {
            background: transparent;
            border-bottom: 1rpx solid #eee;
            margin-bottom: 0;
            
            &:last-child {
                border-bottom: none;
            }
            
            .label {
                font-size: 26rpx;
                color: #666;
                margin-bottom: 10rpx;
                padding-top: 20rpx;
            }
            
            .input {
                font-size: 26rpx;
                padding-bottom: 15rpx;
                line-height: 1.4;
                
                &::placeholder {
                    font-size: 26rpx;
                    line-height: 1.4;
                }
            }
        }
    }
}

.add-contact-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    margin: 20rpx 30rpx 30rpx 30rpx;
    padding: 20rpx;
    background: #fff;
    border: 2rpx dashed #ddd;
    border-radius: 12rpx;
    
    .add-icon {
        font-size: 32rpx;
        color: #256BFA;
        margin-right: 10rpx;
        font-weight: bold;
    }
    
    .add-text {
        font-size: 28rpx;
        color: #256BFA;
        font-weight: 500;
    }
    
    &:active {
        background: #e3f2fd;
        border-color: #256BFA;
    }
}

.bottom-safe-area {
    height: 120rpx;
    background: transparent;
}

.footer {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    background: #fff;
    padding: 20rpx 30rpx;
    border-top: 1rpx solid #eee;
    z-index: 100;
    
    .btn-group {
        display: flex;
        gap: 20rpx;
        
        .btn {
            flex: 1;
            height: 80rpx;
            border-radius: 12rpx;
            font-size: 32rpx;
            font-weight: 500;
            border: none;
            
            &.btn-cancel {
                background: #f5f5f5;
                color: #666;
            }
            
            &.btn-publish {
                background: #256BFA;
                color: #fff;
            }
        }
    }
}

/* 防止键盘弹出时页面偏移 */
/* #ifdef H5 */
.publish-job-page {
    -webkit-overflow-scrolling: touch;
    -webkit-transform: translateZ(0);
    transform: translateZ(0);
}

.publish-job-page * {
    -webkit-transform: translateZ(0);
    transform: translateZ(0);
}
/* #endif */

/* #ifdef MP-WEIXIN */
.publish-job-page {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}
/* #endif */
</style>
