import flet as ft
from utils import AppView, Title
from .functions import Theme, config


def Settings(page: ft.Page):
    settingsContainer = ft.ListView(
        expand=True,
    )
    settingsContainer.controls.append(ft.Text('General'))

    def _on_name_change(e: ft.ControlEvent):
        newName = ft.CupertinoTextField(value=config.get('general', 'name'))
        dlg = ft.CupertinoAlertDialog(
            modal=True,
            title=ft.Text('Enter your Full name'),
            content=newName,
            actions=[
                ft.CupertinoButton(
                    'Save',
                    on_click=lambda _: (
                        setattr(
                            dlg,
                            'open',
                            False,
                        ),
                        config.save(
                            'general',
                            'name',
                            newName.value,
                        ),
                        page.update(),
                    ),
                ),
                ft.CupertinoButton(
                    'Close',
                    on_click=lambda _: (
                        setattr(dlg, 'open', False),
                        page.update(),
                    ),
                ),
            ],
        )
        page.dialog = dlg
        dlg.open = True
        page.update()

    def _on_phone_change(e: ft.ControlEvent):
        newPhone = ft.CupertinoTextField(value=config.get('general', 'phone'))
        dlg = ft.CupertinoAlertDialog(
            modal=True,
            title=ft.Text('Enter your Mobile'),
            content=newPhone,
            actions=[
                ft.CupertinoButton(
                    'Save',
                    on_click=lambda _: (
                        setattr(
                            dlg,
                            'open',
                            False,
                        ),
                        config.save(
                            'general',
                            'phone',
                            newPhone.value,
                        ),
                        page.update(),
                    ),
                ),
                ft.CupertinoButton(
                    'Close',
                    on_click=lambda _: (
                        setattr(dlg, 'open', False),
                        page.update(),
                    ),
                ),
            ],
        )
        page.dialog = dlg
        dlg.open = True
        page.update()

    def _on_email_change(e: ft.ControlEvent):
        newEmail = ft.CupertinoTextField(value=config.get('general', 'email'))
        dlg = ft.CupertinoAlertDialog(
            modal=True,
            title=ft.Text('Enter your Email'),
            content=newEmail,
            actions=[
                ft.CupertinoButton(
                    'Save',
                    on_click=lambda _: (
                        setattr(
                            dlg,
                            'open',
                            False,
                        ),
                        config.save(
                            'general',
                            'email',
                            newEmail.value,
                        ),
                        page.update(),
                    ),
                ),
                ft.CupertinoButton(
                    'Close',
                    on_click=lambda _: (
                        setattr(dlg, 'open', False),
                        page.update(),
                    ),
                ),
            ],
        )
        page.dialog = dlg
        dlg.open = True
        page.update()

    def _on_nid_change(e: ft.ControlEvent):
        newNID = ft.CupertinoTextField(value=config.get('general', 'nid'))
        dlg = ft.CupertinoAlertDialog(
            modal=True,
            title=ft.Text('Enter your NID'),
            content=newNID,
            actions=[
                ft.CupertinoButton(
                    'Save',
                    on_click=lambda _: (
                        setattr(
                            dlg,
                            'open',
                            False,
                        ),
                        config.save(
                            'general',
                            'nid',
                            newNID.value,
                        ),
                        page.update(),
                    ),
                ),
                ft.CupertinoButton(
                    'Close',
                    on_click=lambda _: (
                        setattr(dlg, 'open', False),
                        page.update(),
                    ),
                ),
            ],
        )
        page.dialog = dlg
        dlg.open = True
        page.update()

    generalSettings = ft.Container(
        content=ft.Column(
            controls=[
                ft.Card(
                    content=ft.Container(
                        ink=True,
                        content=ft.Column(
                            [
                                ft.ListTile(
                                    leading=ft.Icon(ft.icons.PERSON),
                                    title=ft.Text('Username'),
                                    subtitle=ft.Text(
                                        'The greeting message',
                                    ),
                                ),
                            ],
                        ),
                        padding=10,
                        on_click=_on_name_change,
                    ),
                ),
                ft.Card(
                    content=ft.Container(
                        ink=True,
                        content=ft.Column(
                            [
                                ft.ListTile(
                                    leading=ft.Icon(ft.icons.PHONE),
                                    title=ft.Text('Phone'),
                                    subtitle=ft.Text(
                                        'Personal Phone number',
                                    ),
                                ),
                            ],
                        ),
                        padding=10,
                        on_click=_on_phone_change,
                    ),
                ),
                ft.Card(
                    content=ft.Container(
                        ink=True,
                        content=ft.Column(
                            [
                                ft.ListTile(
                                    leading=ft.Icon(ft.icons.EMAIL),
                                    title=ft.Text('Email'),
                                    subtitle=ft.Text(
                                        'Personal Email',
                                    ),
                                ),
                            ],
                        ),
                        padding=10,
                        on_click=_on_email_change,
                    ),
                ),
                ft.Card(
                    content=ft.Container(
                        ink=True,
                        content=ft.Column(
                            [
                                ft.ListTile(
                                    leading=ft.Icon(ft.icons.CARD_TRAVEL),
                                    title=ft.Text('NID'),
                                    subtitle=ft.Text(
                                        'National Idenity Number',
                                    ),
                                ),
                            ],
                        ),
                        padding=10,
                        on_click=_on_nid_change,
                    ),
                ),
            ],
        ),
    )
    settingsContainer.controls.append(
        generalSettings,
    )
    # settingsContainer.controls.append(ft.Divider())
    # settingsContainer.controls.append(ft.Text('Notifications'))
    # notificationsSettings = ft.Container(
    #     content=ft.Column(
    #         controls=[
    #             ft.Card(
    #                 content=ft.Container(
    #                     ink=True,
    #                     content=ft.Column(
    #                         [
    #                             ft.ListTile(
    #                                 leading=ft.Icon(ft.icons.TELEGRAM),
    #                                 title=ft.Text('Telegram'),
    #                                 subtitle=ft.Text(
    #                                     'Telegram Notifications for reminders and Bill pays',
    #                                 ),
    #                             ),
    #                         ],
    #                     ),
    #                     padding=10,
    #                     on_click=lambda _: print('clicked username'),
    #                 ),
    #             ),
    #         ],
    #     ),
    # )
    # settingsContainer.controls.append(
    #     notificationsSettings,
    # )
    settingsContainer.controls.append(ft.Divider())
    settingsContainer.controls.append(ft.Text('Apps'))
    appsSettings = ft.Container(
        content=ft.Column(
            controls=[
                ft.Card(
                    content=ft.Container(
                        ink=True,
                        content=ft.Column(
                            [
                                ft.ListTile(
                                    leading=ft.Image(
                                        border_radius=ft.border_radius.all(10),
                                        fit=ft.ImageFit.CONTAIN,
                                        src='https://asset.brandfetch.io/idZJsIaold/id9-VJM_HU.png',
                                    ),
                                    title=ft.Text('Dhiraagu'),
                                    subtitle=ft.Text(
                                        'An ISP Service.',
                                    ),
                                ),
                            ],
                        ),
                        padding=10,
                        on_click=lambda _: page.go('/settings/dhiraagu'),
                    ),
                ),
                ft.Card(
                    content=ft.Container(
                        ink=True,
                        content=ft.Column(
                            [
                                ft.ListTile(
                                    leading=ft.Image(
                                        border_radius=ft.border_radius.all(10),
                                        fit=ft.ImageFit.CONTAIN,
                                        src='https://asset.brandfetch.io/idR1xFKHLD/idu6J-WQsm.jpeg',
                                    ),
                                    title=ft.Text('Ooredoo'),
                                    subtitle=ft.Text(
                                        'An ISP Service.',
                                    ),
                                ),
                            ],
                        ),
                        padding=10,
                        on_click=lambda _: page.go('/settings/ooredoo'),
                    ),
                ),
                ft.Card(
                    content=ft.Container(
                        ink=True,
                        content=ft.Column(
                            [
                                ft.ListTile(
                                    leading=ft.Image(
                                        border_radius=ft.border_radius.all(10),
                                        fit=ft.ImageFit.CONTAIN,
                                        src='https://www.stelco.com.mv/wp-content/uploads/2022/02/unnamed.png',
                                    ),
                                    title=ft.Text('STELCO'),
                                    subtitle=ft.Text(
                                        'Electricity Bills',
                                    ),
                                ),
                            ],
                        ),
                        padding=10,
                        on_click=lambda _: page.go('/settings/stelco'),
                    ),
                ),
                ft.Card(
                    content=ft.Container(
                        ink=True,
                        content=ft.Column(
                            [
                                ft.ListTile(
                                    leading=ft.Image(
                                        border_radius=ft.border_radius.all(10),
                                        fit=ft.ImageFit.CONTAIN,
                                        src='https://asset.brandfetch.io/idOZWUOUm-/idNastd9Bg.jpeg',
                                    ),
                                    title=ft.Text('MWSC'),
                                    subtitle=ft.Text(
                                        'Water Bills',
                                    ),
                                ),
                            ],
                        ),
                        padding=10,
                        on_click=lambda _: page.go('/settings/mwsc'),
                    ),
                ),
                ft.Card(
                    content=ft.Container(
                        ink=True,
                        content=ft.Column(
                            [
                                ft.ListTile(
                                    leading=ft.Image(
                                        border_radius=ft.border_radius.all(10),
                                        fit=ft.ImageFit.CONTAIN,
                                        src='https://asset.brandfetch.io/idLMZnv5SC/iduyX4keYN.jpeg',
                                    ),
                                    title=ft.Text('Medianet'),
                                    subtitle=ft.Text(
                                        'Online Television Service',
                                    ),
                                ),
                            ],
                        ),
                        padding=10,
                        on_click=lambda _: page.go('/settings/medianet'),
                    ),
                ),
            ],
        ),
    )
    settingsContainer.controls.append(appsSettings)
    settingsContainer.controls.append(ft.Divider())
    settingsContainer.controls.append(ft.Text('Theme'))

    def _on_theme_change(e: ft.ControlEvent):
        if page.theme_mode == ft.ThemeMode.LIGHT:
            e.value = False
            config.save('general', 'theme', 'dark')
        else:
            e.value = True
            config.save('general', 'theme', 'light')
        Theme(page).change(
            (
                ft.ThemeMode.DARK
                if page.theme_mode == ft.ThemeMode.LIGHT
                else ft.ThemeMode.LIGHT
            ),
        )

    themeSettings = ft.Container(
        content=ft.Column(
            controls=[
                ft.Card(
                    content=ft.Container(
                        content=ft.Container(
                            ft.Switch(
                                label='     Switch to dark theme',
                                on_change=_on_theme_change,
                                value=True,
                            ),
                        ),
                        padding=10,
                        on_click=None,
                    ),
                ),
            ],
        ),
    )
    settingsContainer.controls.append(themeSettings)
    return AppView(
        '/settings',
        [
            ft.AppBar(
                leading=ft.IconButton(
                    ft.icons.ARROW_BACK_IOS_NEW_ROUNDED,
                    on_click=lambda _: page.go('/'),
                ),
                title=ft.Text(Title(str(__file__))),
                bgcolor=ft.colors.TRANSPARENT,
            ),
            settingsContainer,
        ],
    )