# -*- coding: utf-8 -*-
"""
用户模型 & 权限管理
三类权限：管理员、操作账号、审批账号
"""

from datetime import datetime
from werkzeug.security import generate_password_hash, check_password_hash
from flask_login import UserMixin

# 角色定义
ROLES = {
    'admin': {
        'name': '管理员',
        'permissions': ['read', 'write', 'approve', 'manage_users', 'config']
    },
    'operator': {
        'name': '操作账号',
        'permissions': ['read', 'write', 'apply']
    },
    'approver': {
        'name': '审批账号',
        'permissions': ['read', 'approve']
    }
}

class User(UserMixin):
    def __init__(self, id, username, realname, role, password):
        self.id = id
        self.username = username
        self.realname = realname
        self.role = role
        self.set_password(password)
        self.created_at = datetime.now()
    
    def has_permission(self, permission):
        """检查是否有权限"""
        if self.role not in ROLES:
            return False
        return permission in ROLES[self.role]['permissions']
    
    def get_role_name(self):
        """获取角色显示名"""
        if self.role in ROLES:
            return ROLES[self.role]['name']
        return self.role
    
    def set_password(self, password):
        self.password_hash = generate_password_hash(password)
    
    def check_password(self, password):
        return check_password_hash(self.password_hash, password)
    
    def to_dict(self):
        return {
            'id': self.id,
            'username': self.username,
            'realname': self.realname,
            'role': self.role,
            'role_name': self.get_role_name(),
            'created_at': self.created_at.isoformat()
        }

# 初始化默认用户
# 密码都在构造时直接生成，确保正确
default_admin = User(
    id=1,
    username='admin',
    realname='系统管理员',
    role='admin',
    password='admin123'
)

operator1 = User(
    id=2,
    username='operator1',
    realname='操作人员1',
    role='operator',
    password='123456'
)

approver1 = User(
    id=3,
    username='approver1',
    realname='审批人员1',
    role='approver',
    password='123456'
)

default_users = [
    default_admin,
    operator1,
    approver1
]
