parameters:
    # physical storage path
    upload_dir: '%kernel.project_dir%/public/storage/uploads'
    category_upload_dir: '%upload_dir%/category'
    user_upload_dir: '%upload_dir%/user'
    product_upload_dir: '%upload_dir%/product'

    # relative URL path
    base_path: '/storage/uploads'
    category_base_path: '%base_path%/category'
    user_base_path: '%base_path%/user'
    product_base_path: '%base_path%/product'
    
    # S3 Bucket config
    storage_bucket: '%env(resolve:STORAGE_BUCKET)%'
    
# Read the documentation at https://github.com/thephpleague/flysystem-bundle/blob/master/docs/1-getting-started.md
flysystem:
    storages:
        category.storage:
            adapter: 'local'
            options:
                directory: '%category_upload_dir%'
            public_url: '%category_base_path%'
            
         # local 
        user.storage:
            adapter: 'local'
            options:
                directory: '%user_upload_dir%'        
            public_url: '%user_base_path%'
           
        # Test S3 config locally with the min.io service (@see the docker compose files) 
#        user.storage:
#            adapter: 'aws'
#            visibility: public
#            options:
#                bucket: '%storage_bucket%'
#                prefix: 'user'
#                client: 'Aws\S3\S3Client'

        product.storage:
            adapter: 'local'
            options:
                directory: '%product_upload_dir%'        
            public_url: '%product_base_path%'                
        default.storage:
            adapter: 'local'
            options:
                directory: '%upload_dir%'
            public_url: '%base_path%'

# memory storage in the test env so we don't have to manipulate actual files
when@test:
    flysystem:
        storages:
            category.storage:
                adapter: 'memory'
                public_url: '%category_base_path%'
            user.storage:
                adapter: 'memory'
                public_url: '%user_base_path%'
            product.storage:
                adapter: 'memory'
                public_url: '%product_base_path%'
            default.storage:
                adapter: 'memory'
                public_url: '%base_path%'

# S3 compatible bucket in the production environment
when@prod:
    flysystem:
        storages:
            category.storage:
                adapter: 'aws'
                visibility: public
                options:
                    bucket: '%storage_bucket%'
                    prefix: 'category'
                    client: 'Aws\S3\S3Client'
            user.storage:
                adapter: 'aws'
                visibility: public
                options:
                    bucket: '%storage_bucket%'
                    prefix: 'user'
                    client: 'Aws\S3\S3Client'
            product.storage:
                adapter: 'aws'
                visibility: public
                options:
                    bucket: '%storage_bucket%'
                    prefix: 'product'
                    client: 'Aws\S3\S3Client'
            default.storage:
                adapter: 'aws'
                visibility: public
                options:
                    bucket: '%storage_bucket%'
                    client: 'Aws\S3\S3Client'
