from nicegui import ui

from ..documentation_tools import text_demo


def main_demo() -> None:
    ui.upload(on_upload=lambda e: ui.notify(f'Uploaded {e.name}')).classes('max-w-full')


def more() -> None:
    @text_demo('Upload restrictions', '''
        In this demo, the upload is restricted to a maximum file size of 1 MB.
        When a file is rejected, a notification is shown.
    ''')
    def upload_restrictions() -> None:
        ui.upload(on_upload=lambda e: ui.notify(f'Uploaded {e.name}'),
                  on_rejected=lambda: ui.notify('Rejected!'),
                  max_file_size=1_000_000).classes('max-w-full')

    @text_demo('Show file content', '''
        In this demo, the uploaded markdown file is shown in a dialog.
    ''')
    def show_file_content() -> None:
        from nicegui import events

        with ui.dialog().props('full-width') as dialog:
            with ui.card():
                content = ui.markdown()

        def handle_upload(e: events.UploadEventArguments):
            text = e.content.read().decode('utf-8')
            content.set_content(text)
            dialog.open()

        ui.upload(on_upload=handle_upload).props('accept=.md').classes('max-w-full')
