from flask import Flask, render_template, request, flash
import pandas as pd
import os
import re

app = Flask(__name__)
app.secret_key = 'your_secret_key_here'

# 数据库文件路径
DATABASE_PATH = os.path.join(os.path.dirname(__file__), 'data', 'database.csv')

def load_database():
    """加载CSV数据库"""
    try:
        # 确保读取时没有额外的空格
        return pd.read_csv(DATABASE_PATH, dtype=str, keep_default_na=False)
    except FileNotFoundError:
        return pd.DataFrame()

def validate_code(input_data):
    """验证输入是否为8位数字字母组合"""
    pattern = r'^[A-Za-z0-9]{8}$'
    return bool(re.match(pattern, input_data))

def compare_data(input_data, db_data):
    """比较输入数据与数据库数据"""
    if db_data.empty:
        return False
    # 保持数据库代码原始大小写
    db_codes = db_data['code']
    # 直接进行精确匹配
    return input_data in db_codes.values

@app.route('/', methods=['GET', 'POST'])
def index():
    result = None
    if request.method == 'POST':
        # 获取表单数据，保持原始大小写
        input_data = request.form.get('data', '').strip()
        
        # 验证输入
        if not validate_code(input_data):
            flash('请输入8位数字字母组合', 'error')
        else:
            # 加载数据库
            db_data = load_database()
            
            # 比较数据
            result = compare_data(input_data, db_data)
            if result:
                flash('验证成功：代码正确！', 'success')
            else:
                flash('验证失败：代码不存在！', 'error')
    
    return render_template('index.html')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
