bl_info = {
    "name": "File Browser Display Mode",
    "author": "AI",
    "version": (1, 0),
    "blender": (3, 0, 0),
    "location": "File Browser > View",
    "description": "Adds buttons to switch the file browser to different views.",
    "category": "File Browser",
}

import bpy

addon_keymaps = []

def set_file_browser_view(view_type):
    for area in bpy.context.screen.areas:
        if area.type == 'FILE_BROWSER':
            with bpy.context.temp_override(area=area):
                space_data = area.spaces.active
                params = space_data.params
                if params:
                    params.display_type = view_type

class FILEBROWSER_OT_set_vertical_list(bpy.types.Operator):
    """Set File Browser to Vertical List View"""
    bl_idname = "filebrowser.set_vertical_list"
    bl_label = "Vertical List"
    
    def execute(self, context):
        set_file_browser_view('LIST_VERTICAL')
        return {'FINISHED'}

class FILEBROWSER_OT_set_horizontal_list(bpy.types.Operator):
    """Set File Browser to Horizontal List View"""
    bl_idname = "filebrowser.set_horizontal_list"
    bl_label = "Horizontal List"
    
    def execute(self, context):
        set_file_browser_view('LIST_HORIZONTAL')
        return {'FINISHED'}

class FILEBROWSER_OT_set_thumbnails(bpy.types.Operator):
    """Set File Browser to Thumbnails View"""
    bl_idname = "filebrowser.set_thumbnails"
    bl_label = "Thumbnails"
    
    def execute(self, context):
        set_file_browser_view('THUMBNAIL')
        return {'FINISHED'}

class FILEBROWSER_PT_custom_panel(bpy.types.Panel):
    """Creates a custom panel in the File Browser"""
    bl_label = "Custom Display Mode"
    bl_idname = "FILEBROWSER_PT_custom_panel"
    bl_space_type = 'FILE_BROWSER'
    bl_region_type = 'TOOLS'
    bl_category = "View"
    
    def draw(self, context):
        layout = self.layout
        layout.operator("filebrowser.set_vertical_list", icon='ALIGN_JUSTIFY')
        layout.operator("filebrowser.set_horizontal_list", icon='ALIGN_CENTER')
        layout.operator("filebrowser.set_thumbnails", icon='FILE_IMAGE')

def register():
    bpy.utils.register_class(FILEBROWSER_OT_set_vertical_list)
    bpy.utils.register_class(FILEBROWSER_OT_set_horizontal_list)
    bpy.utils.register_class(FILEBROWSER_OT_set_thumbnails)
    bpy.utils.register_class(FILEBROWSER_PT_custom_panel)
    
    # Ensure keymaps are registered on addon installation
    wm = bpy.context.window_manager
    if wm.keyconfigs.addon:
        km = wm.keyconfigs.addon.keymaps.new(name="File Browser Main", space_type='FILE_BROWSER')
        kmi1 = km.keymap_items.new("filebrowser.set_vertical_list", 'ONE', 'PRESS', oskey=True)
        kmi2 = km.keymap_items.new("filebrowser.set_horizontal_list", 'TWO', 'PRESS', oskey=True)
        kmi3 = km.keymap_items.new("filebrowser.set_thumbnails", 'THREE', 'PRESS', oskey=True)
        addon_keymaps.extend([(km, kmi1), (km, kmi2), (km, kmi3)])

def unregister():
    bpy.utils.unregister_class(FILEBROWSER_PT_custom_panel)
    bpy.utils.unregister_class(FILEBROWSER_OT_set_vertical_list)
    bpy.utils.unregister_class(FILEBROWSER_OT_set_horizontal_list)
    bpy.utils.unregister_class(FILEBROWSER_OT_set_thumbnails)
    
    # Ensure keymaps are unregistered on addon removal
    wm = bpy.context.window_manager
    if wm.keyconfigs.addon:
        for km, kmi in addon_keymaps:
            km.keymap_items.remove(kmi)
        addon_keymaps.clear()

if __name__ == "__main__":
    register()
