from flask import Flask, render_template, request, jsonify, make_response
import sqlite3
import random
import time
from datetime import datetime, timedelta
import os

app = Flask(__name__)

# 数据库初始化
def init_db():
    conn = sqlite3.connect('users.db')
    c = conn.cursor()
    c.execute('''
        CREATE TABLE IF NOT EXISTS users (
            phone TEXT PRIMARY KEY,
            code TEXT,
            code_expire TIMESTAMP,
            create_time TIMESTAMP,
            expire_time TIMESTAMP,
            is_active INTEGER
        )
    ''')
    conn.commit()
    conn.close()

init_db()

# 项目数据（从HTML移过来，后端动态返回）
PROJECTS = [
    {
        "id": "test-001",
        "title": "信息化基础硬件设备及网络安全设备升级改造项目",
        "taskType": "task1",
        "taskName": "全行业信息化",
        "purchaser": "天津市第一医院（示例）",
        "budget": "1450万元",
        "publishTime": "2025-05-28",
        "deadline": "2025-06-20",
        "contact": "寇老师 022-86662923",
        "sourceUrl": "https://www.tj.gov.cn/",
        "description": "提升硬件性能满足HIS/PACS/LIS/EMR核心系统高并发需求，构建覆盖网络、主机、数据全生命周期安全防护体系，包括：高性能服务器、分布式存储、下一代防火墙、零信任安全防护、灾备系统升级",
        "keywords": ["信息化", "网络安全", "服务器", "存储"]
    },
    {
        "id": "sz-2026-0295",
        "title": "香港中文大学（深圳）信息化二期建设",
        "taskType": "task2",
        "taskName": "重点项目动态",
        "purchaser": "香港中文大学（深圳）",
        "budget": "待招标",
        "publishTime": "2026-03-17",
        "deadline": "-",
        "contact": "-",
        "sourceUrl": None,
        "description": "深圳市2026年重大项目 №295，校园信息化基础设施二期建设，包括数据中心升级、智慧校园信息化建设",
        "keywords": ["信息化", "智慧校园", "数据中心"]
    },
    {
        "id": "sz-2026-0013",
        "title": "中国联通深圳同乐机楼二号楼工程",
        "taskType": "task3",
        "taskName": "室分工程",
        "purchaser": "中国联合网络通信集团有限公司深圳市分公司",
        "budget": "待招标",
        "publishTime": "2026-03-17",
        "deadline": "-",
        "contact": "-",
        "sourceUrl": None,
        "description": "深圳市2026年重大项目 №13，通信机楼建设，包含5G信号分布系统、国标机房改造工程",
        "keywords": ["5G", "信号分布", "国标机房"]
    }
]

# 生成验证码
def generate_code():
    return ''.join(random.choices('0123456789', k=6))

# 检查登录token
def check_auth():
    token = request.cookies.get('token')
    if not token:
        return False
    # 简单token验证：phone_expire
    try:
        phone, expire = token.split('_')
        expire_time = float(expire)
        if time.time() > expire_time:
            return False
        return phone
    except:
        return False

@app.route('/')
def index():
    phone = check_auth()
    if not phone:
        return render_template('login.html')
    return render_template('index.html', phone=phone)

@app.route('/api/send-code', methods=['POST'])
def send_code():
    phone = request.json.get('phone')
    if not phone or len(phone) != 11:
        return jsonify({'code': 400, 'msg': '请输入正确的11位手机号码'})
    
    code = generate_code()
    expire = datetime.now() + timedelta(minutes=10)
    
    conn = sqlite3.connect('users.db')
    c = conn.cursor()
    
    # 检查是否已有用户
    c.execute('SELECT * FROM users WHERE phone = ?', (phone,))
    existing = c.fetchone()
    
    if existing:
        # 更新验证码
        c.execute('''
            UPDATE users 
            SET code = ?, code_expire = ? 
            WHERE phone = ?
        ''', (code, expire.strftime('%Y-%m-%d %H:%M:%S'), phone))
    else:
        # 新用户，默认7天过期（可调整）
        user_expire = datetime.now() + timedelta(days=7)
        c.execute('''
            INSERT INTO users (phone, code, code_expire, create_time, expire_time, is_active)
            VALUES (?, ?, ?, ?, ?, 1)
        ''', (phone, code, expire.strftime('%Y-%m-%d %H:%M:%S'), 
              datetime.now().strftime('%Y-%m-%d %H:%M:%S'), 
              user_expire.strftime('%Y-%m-%d %H:%M:%S')))
    
    conn.commit()
    conn.close()
    
    # 开发模式：直接返回验证码（正式环境应该发短信）
    # 你可以对接阿里云短信/腾讯云短信
    print(f"验证码 {code} 已发送到 {phone}")
    
    return jsonify({
        'code': 200,
        'msg': '验证码已发送',
        'dev_code': code  # 开发环境返回，正式环境去掉这行
    })

@app.route('/api/verify-code', methods=['POST'])
def verify_code():
    phone = request.json.get('phone')
    code = request.json.get('code')
    
    conn = sqlite3.connect('users.db')
    c = conn.cursor()
    c.execute('SELECT * FROM users WHERE phone = ?', (phone,))
    user = c.fetchone()
    
    if not user:
        return jsonify({'code': 400, 'msg': '用户不存在'})
    
    code_expire = datetime.strptime(user[2], '%Y-%m-%d %H:%M:%S')
    if datetime.now() > code_expire:
        return jsonify({'code': 400, 'msg': '验证码已过期，请重新获取'})
    
    if user[1] != code:
        return jsonify({'code': 400, 'msg': '验证码错误'})
    
    # 登录成功，设置cookie过期
    expire_days = 7
    expire_time = time.time() + expire_days * 24 * 60 * 60
    token = f"{phone}_{expire_time}"
    
    response = jsonify({
        'code': 200,
        'msg': '登录成功'
    })
    
    response.set_cookie('token', token, max_age=expire_days * 24 * 60 * 60)
    return response

@app.route('/api/projects')
def get_projects():
    phone = check_auth()
    if not phone:
        return jsonify({'code': 401, 'msg': '请先登录'})
    
    return jsonify({
        'code': 200,
        'data': PROJECTS
    })

@app.route('/api/add-project', methods=['POST'])
def add_project():
    # 这个接口用来让我添加新项目
    # 后面可以加个简单验证
    project = request.json
    PROJECTS.append(project)
    return jsonify({'code': 200, 'msg': '添加成功', 'total': len(PROJECTS)})

if __name__ == '__main__':
    from waitress import serve
    serve(app, host='0.0.0.0', port=5000)
