<?php
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

class ACC_AuthController {

    /* ── Login ──────────────────────────────────────────── */
    public static function login( \WP_REST_Request $request ) {

        $username = sanitize_text_field( $request->get_param( 'username' ) );
        $password = (string) $request->get_param( 'password' );
        $remember = (bool) $request->get_param( 'remember' );

        if ( $username === '' || $password === '' ) {
            return new \WP_Error( 'missing_credentials', 'نام کاربری و رمز عبور الزامی است.', [ 'status' => 400 ] );
        }

        $user = wp_authenticate( $username, $password );

        if ( is_wp_error( $user ) ) {
            return new \WP_Error( 'invalid_credentials', 'نام کاربری یا رمز عبور اشتباه است.', [ 'status' => 401 ] );
        }

        if ( ! function_exists( 'acc_jwt_generate_token' ) ) {
            return new \WP_Error( 'jwt_not_available', 'سامانه JWT در دسترس نیست.', [ 'status' => 500 ] );
        }

        $token = acc_jwt_generate_token( $user, $remember );

        if ( ! $token ) {
            return new \WP_Error( 'token_generation_failed', 'ایجاد توکن با خطا مواجه شد.', [ 'status' => 500 ] );
        }

        return new \WP_REST_Response( [
            'success' => true,
            'token'   => $token,
            'user'    => [
                'id'       => $user->ID,
                'name'     => $user->display_name,
                'email'    => $user->user_email,
                'username' => $user->user_login,
            ],
        ], 200 );
    }

    /* ── Register ───────────────────────────────────────── */
    public static function register( \WP_REST_Request $request ) {

        // بررسی اینکه ثبت‌نام کاربران در وردپرس فعال است
        if ( ! get_option( 'users_can_register' ) ) {
            return new \WP_Error( 'registration_disabled', 'ثبت‌نام کاربر جدید در حال حاضر غیرفعال است.', [ 'status' => 403 ] );
        }

        $username  = sanitize_user( $request->get_param( 'username' ) ?? '' );
        $email     = sanitize_email( $request->get_param( 'email' ) ?? '' );
        $password  = (string) ( $request->get_param( 'password' ) ?? '' );
        $firstname = sanitize_text_field( $request->get_param( 'firstname' ) ?? '' );
        $lastname  = sanitize_text_field( $request->get_param( 'lastname' ) ?? '' );

        if ( ! $username || ! $email || ! $password ) {
            return new \WP_Error( 'missing_fields', 'نام کاربری، ایمیل و رمز عبور الزامی است.', [ 'status' => 400 ] );
        }

        if ( ! is_email( $email ) ) {
            return new \WP_Error( 'invalid_email', 'آدرس ایمیل معتبر نیست.', [ 'status' => 400 ] );
        }

        if ( username_exists( $username ) ) {
            return new \WP_Error( 'username_exists', 'این نام کاربری قبلاً ثبت شده است.', [ 'status' => 409 ] );
        }

        if ( email_exists( $email ) ) {
            return new \WP_Error( 'email_exists', 'این ایمیل قبلاً ثبت شده است.', [ 'status' => 409 ] );
        }

        if ( strlen( $password ) < 6 ) {
            return new \WP_Error( 'weak_password', 'رمز عبور باید حداقل ۶ کاراکتر باشد.', [ 'status' => 400 ] );
        }

        $user_id = wp_create_user( $username, $password, $email );

        if ( is_wp_error( $user_id ) ) {
            return new \WP_Error( 'registration_failed', $user_id->get_error_message(), [ 'status' => 500 ] );
        }

        // ذخیره اطلاعات اضافی
        if ( $firstname ) wp_update_user( [ 'ID' => $user_id, 'first_name' => $firstname, 'last_name' => $lastname, 'display_name' => trim("$firstname $lastname") ?: $username ] );

        // ارسال ایمیل خوش‌آمد
        wp_new_user_notification( $user_id, null, 'both' );

        return new \WP_REST_Response( [
            'success' => true,
            'message' => 'حساب کاربری با موفقیت ایجاد شد. لطفاً وارد شوید.',
        ], 201 );
    }

    /* ── Forgot Password ────────────────────────────────── */
    public static function forgot_password( \WP_REST_Request $request ) {

        $login = sanitize_text_field( $request->get_param( 'login' ) ?? '' );

        if ( ! $login ) {
            return new \WP_Error( 'missing_login', 'نام کاربری یا ایمیل الزامی است.', [ 'status' => 400 ] );
        }

        $user = is_email( $login )
            ? get_user_by( 'email', $login )
            : get_user_by( 'login', $login );

        if ( ! $user ) {
            // عمداً پیام کلی می‌دهیم تا امنیت حفظ شود
            return new \WP_REST_Response( [
                'success' => true,
                'message' => 'اگر این ایمیل در سیستم وجود داشته باشد، لینک بازیابی ارسال خواهد شد.',
            ], 200 );
        }

        // استفاده از مکانیزم وردپرس
        $result = retrieve_password( $user->user_login );

        if ( is_wp_error( $result ) ) {
            return new \WP_Error( 'reset_failed', 'ارسال ایمیل بازیابی با خطا مواجه شد.', [ 'status' => 500 ] );
        }

        return new \WP_REST_Response( [
            'success' => true,
            'message' => 'لینک بازیابی رمز عبور به ایمیل شما ارسال شد.',
        ], 200 );
    }
}
