import { createSlice } from '@reduxjs/toolkit';

// ----------------------------------------------------
// Helper Function: กำหนดบทบาท (Role) จาก Django User Object
// ----------------------------------------------------
const determineRole = (user) => {
    if (!user || !user.id) {
        return 'GUEST';
    }

    // 1. ใช้ฟิลด์ 'role' ที่ส่งมาจาก Backend โดยตรง
    if (user.role) {
        return user.role.toUpperCase();
    }

    // 2. ใช้ฟิลด์ is_superuser/is_staff เป็น Fallback
    if (user.is_superuser) {
        return 'ADMIN'; //
    }
    if (user.is_staff) {
        return 'OPERATOR';
    }

    // ผู้ใช้ทั่วไป
    return 'VIEWER';
};

// ----------------------------------------------------
// ฟังก์ชันช่วยในการอ่านค่าจาก Local Storage เพื่อกำหนดสถานะเริ่มต้น
// ----------------------------------------------------
const getInitialAuthState = () => {
    const token = localStorage.getItem('token');
    // อ่าน user object
    const user = JSON.parse(localStorage.getItem('user'));

    return {
        isAuthenticated: !!token,
        user: user || null,
        // คำนวณ Role จาก user object ที่โหลดมา เพื่อให้เป็น Single Source of Truth
        role: determineRole(user),
    };
};

const initialState = getInitialAuthState();

const authSlice = createSlice({
    name: 'auth',
    initialState,
    reducers: {
        // Reducer สำหรับการล็อกอินสำเร็จ
        loginSuccess: (state, action) => {
            const user = action.payload.user;
            state.isAuthenticated = true;
            state.user = user;
            state.role = determineRole(user);  // คำนวณ role ทุกครั้ง
        },

        // Reducer สำหรับการออกจากระบบ
        logout: (state) => {
            state.isAuthenticated = false;
            state.user = null;
            state.role = 'GUEST';
            // ลบข้อมูลจาก localStorage
            localStorage.removeItem('token');
            localStorage.removeItem('user');
        },

        // Reducer สำหรับอัปเดตข้อมูลผู้ใช้ (เช่น หลังอัปเดตโปรไฟล์)
        updateUser: (state, action) => {
            const user = action.payload.user;
            state.user = user;
            state.role = determineRole(user); // คำนวณ Role ใหม่จาก User Object ที่อัปเดต
            localStorage.setItem('user', JSON.stringify(user));

        }
    },
});

export const { loginSuccess, logout, updateUser } = authSlice.actions;

export default authSlice.reducer;