<?php
/**
 * Authentication Functions
 * Patel E-Mitra & Aadhaar Seva Kendra CMS
 */

function login($username, $password) {
    $db = getDB();
    
    $stmt = $db->prepare("SELECT * FROM users WHERE (username = ? OR email = ?) AND status = 'active' LIMIT 1");
    $stmt->execute([$username, $username]);
    $user = $stmt->fetch();
    
    if ($user && password_verify($password, $user['password'])) {
        // Set session
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['username'] = $user['username'];
        $_SESSION['email'] = $user['email'];
        $_SESSION['full_name'] = $user['full_name'];
        $_SESSION['role'] = $user['role'];
        
        // Update last login
        $stmt = $db->prepare("UPDATE users SET last_login = NOW() WHERE id = ?");
        $stmt->execute([$user['id']]);
        
        // Log activity
        logActivity('login', 'User logged in');
        
        return true;
    }
    
    return false;
}

function logout() {
    logActivity('logout', 'User logged out');
    
    session_unset();
    session_destroy();
    
    redirect(SITE_URL . '/admin/login.php');
}

function checkPermission($required_role = 'admin') {
    if (!isLoggedIn()) {
        redirect(SITE_URL . '/admin/login.php');
    }
    
    $roles = ['admin' => 3, 'manager' => 2, 'editor' => 1];
    
    if ($roles[$_SESSION['role']] < $roles[$required_role]) {
        setFlashMessage('error', 'You do not have permission to access this page.');
        redirect(SITE_URL . '/admin/index.php');
    }
}

function hashPassword($password) {
    return password_hash($password, PASSWORD_DEFAULT);
}

function verifyPassword($password, $hash) {
    return password_verify($password, $hash);
}

function changePassword($user_id, $old_password, $new_password) {
    $db = getDB();
    
    $stmt = $db->prepare("SELECT password FROM users WHERE id = ?");
    $stmt->execute([$user_id]);
    $user = $stmt->fetch();
    
    if (!$user || !password_verify($old_password, $user['password'])) {
        return false;
    }
    
    $new_hash = hashPassword($new_password);
    $stmt = $db->prepare("UPDATE users SET password = ? WHERE id = ?");
    $stmt->execute([$new_hash, $user_id]);
    
    logActivity('password_change', 'Password changed');
    
    return true;
}

function createUser($data) {
    $db = getDB();
    
    // Check if username or email already exists
    $stmt = $db->prepare("SELECT id FROM users WHERE username = ? OR email = ?");
    $stmt->execute([$data['username'], $data['email']]);
    
    if ($stmt->fetch()) {
        return ['success' => false, 'error' => 'Username or email already exists'];
    }
    
    $password_hash = hashPassword($data['password']);
    
    $stmt = $db->prepare("INSERT INTO users (username, email, password, full_name, phone, role, status) VALUES (?, ?, ?, ?, ?, ?, ?)");
    $stmt->execute([
        $data['username'],
        $data['email'],
        $password_hash,
        $data['full_name'],
        $data['phone'] ?? '',
        $data['role'] ?? 'editor',
        $data['status'] ?? 'active'
    ]);
    
    $user_id = $db->lastInsertId();
    
    logActivity('user_create', "Created user: {$data['username']}");
    
    return ['success' => true, 'user_id' => $user_id];
}

function updateUser($user_id, $data) {
    $db = getDB();
    
    $fields = [];
    $values = [];
    
    if (isset($data['email'])) {
        $fields[] = "email = ?";
        $values[] = $data['email'];
    }
    
    if (isset($data['full_name'])) {
        $fields[] = "full_name = ?";
        $values[] = $data['full_name'];
    }
    
    if (isset($data['phone'])) {
        $fields[] = "phone = ?";
        $values[] = $data['phone'];
    }
    
    if (isset($data['role'])) {
        $fields[] = "role = ?";
        $values[] = $data['role'];
    }
    
    if (isset($data['status'])) {
        $fields[] = "status = ?";
        $values[] = $data['status'];
    }
    
    if (isset($data['password']) && !empty($data['password'])) {
        $fields[] = "password = ?";
        $values[] = hashPassword($data['password']);
    }
    
    if (empty($fields)) {
        return false;
    }
    
    $values[] = $user_id;
    $sql = "UPDATE users SET " . implode(', ', $fields) . " WHERE id = ?";
    
    $stmt = $db->prepare($sql);
    $stmt->execute($values);
    
    logActivity('user_update', "Updated user ID: $user_id");
    
    return true;
}

function deleteUser($user_id) {
    $db = getDB();
    
    // Don't allow deleting yourself
    if ($user_id == $_SESSION['user_id']) {
        return false;
    }
    
    $stmt = $db->prepare("DELETE FROM users WHERE id = ?");
    $stmt->execute([$user_id]);
    
    logActivity('user_delete', "Deleted user ID: $user_id");
    
    return true;
}

function getUser($user_id) {
    $db = getDB();
    
    $stmt = $db->prepare("SELECT * FROM users WHERE id = ?");
    $stmt->execute([$user_id]);
    
    return $stmt->fetch();
}

function getAllUsers() {
    $db = getDB();
    
    $stmt = $db->query("SELECT * FROM users ORDER BY created_at DESC");
    
    return $stmt->fetchAll();
}
?>
