<?php
// controllers/UserController.php
require_once 'controllers/BaseController.php';
require_once 'models/User.php';
require_once 'models/Book.php';

class UserController extends BaseController {
    
    public function profile() {
        $this->requireLogin();
        
        $user_id = $_SESSION['user_id'];
        $userModel = new User($this->pdo);
        $user = $userModel->findById($user_id);

        $message = '';
        $avatar_error = '';

        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            if (!verify_csrf_token($_POST['csrf_token'] ?? '')) {
                $message = "Ошибка безопасности";
            } else {
                $display_name = trim($_POST['display_name'] ?? '');
                $email = trim($_POST['email'] ?? '');
                $bio = trim($_POST['bio'] ?? '');
                
                // Обработка загрузки аватарки
                if (isset($_FILES['avatar']) && $_FILES['avatar']['error'] === UPLOAD_ERR_OK) {
                    $avatar_result = handleAvatarUpload($_FILES['avatar'], $user_id);
                    if ($avatar_result['success']) {
                        $userModel->updateAvatar($user_id, $avatar_result['filename']);
                        // Обновляем данные пользователя
                        $user = $userModel->findById($user_id);
                    } else {
                        $avatar_error = $avatar_result['error'];
                    }
                }
                
                // Обработка удаления аватарки
                if (isset($_POST['delete_avatar']) && $_POST['delete_avatar'] == '1') {
                    deleteUserAvatar($user_id);
                    $user = $userModel->findById($user_id);
                }
                
                // Обновляем основные данные
                $data = [
                    'display_name' => $display_name,
                    'email' => $email,
                    'bio' => $bio
                ];
                
                if ($userModel->updateProfile($user_id, $data)) {
                    $_SESSION['display_name'] = $display_name ?: $user['username'];
                    $message = "Профиль обновлен";
                    // Обновляем данные пользователя
                    $user = $userModel->findById($user_id);
                } else {
                    $message = "Ошибка при обновлении профиля";
                }
            }
        }

        $this->render('user/profile', [
            'user' => $user,
            'message' => $message,
            'avatar_error' => $avatar_error,
            'page_title' => "Мой профиль"
        ]);
    }
    
    public function updateProfile() {
        $this->requireLogin();
        
        // Эта функция обрабатывает AJAX или прямые POST запросы для обновления профиля
        // Можно объединить с методом profile() или оставить отдельно для API-like операций
        $this->profile(); // Перенаправляем на основной метод
    }
    
    public function viewPublic($id) {
        $userModel = new User($this->pdo);
        $user = $userModel->findById($id);

        if (!$user) {
            http_response_code(404);
            $this->render('errors/404');
            return;
        }

        $bookModel = new Book($this->pdo);
        $books = $bookModel->findByUser($id, true); // только опубликованные

        // Получаем статистику автора
        $total_books = count($books);
        $total_words = 0;
        $total_chapters = 0;

        foreach ($books as $book) {
            $book_stats = $bookModel->getBookStats($book['id'], true);
            $total_words += $book_stats['total_words'] ?? 0;
            $total_chapters += $book_stats['chapter_count'] ?? 0;
        }



        $this->render('user/view_public', [
            'user' => $user,
            'books' => $books,
            'total_books' => $total_books,
            'total_words' => $total_words,
            'total_chapters' => $total_chapters,
            'book_model'=>$bookModel,
            'page_title' => ($user['display_name'] ?: $user['username']) . ' — публичная страница'
        ]);
    }
}
?>