from dash import dcc, html


def create_layout_overview(
    account_dropdown: html.Div,
    date_dropdown: html.Div,
    region_dropdown: html.Div,
    download_button_csv: html.Button,
    download_button_xlsx: html.Button,
    severity_dropdown: html.Div,
    service_dropdown: html.Div,
    provider_dropdown: html.Div,
    table_row_dropdown: html.Div,
    status_dropdown: html.Div,
    table_div_header: html.Div,
    amount_providers: int,
) -> html.Div:
    """
    Create the layout of the dashboard.
    Args:
        account_dropdown (html.Div): Dropdown to select the account.
        date_dropdown (html.Div): Dropdown to select the date of the last available scan for each account.
        region_dropdown (html.Div): Dropdown to select the region of the account.
    Returns:
        html.Div: Layout of the dashboard.
    """
    return html.Div(
        [
            dcc.Location(id="url", refresh=False),
            html.Div(
                [
                    html.H1(
                        "Scan Overview",
                        className="text-prowler-stone-900 text-2xxl font-bold",
                    ),
                    html.Div(className="d-flex flex-wrap", id="subscribe_card"),
                ],
                className="flex justify-between border-b border-prowler-500 pb-3",
            ),
            html.Div(
                [
                    html.Div([date_dropdown], className=""),
                    html.Div([account_dropdown], className=""),
                    html.Div([region_dropdown], className=""),
                ],
                className="grid gap-x-4 mt-[30px] mb-[30px] sm:grid-cols-2 lg:grid-cols-3",
            ),
            html.Div(
                [
                    html.Div([severity_dropdown], className=""),
                    html.Div([service_dropdown], className=""),
                    html.Div([provider_dropdown], className=""),
                    html.Div([status_dropdown], className=""),
                ],
                className="grid gap-x-4 mb-[30px] sm:grid-cols-2 lg:grid-cols-4",
            ),
            html.Div(
                [
                    html.Div(className="flex", id="aws_card", n_clicks=0),
                    html.Div(className="flex", id="azure_card", n_clicks=0),
                    html.Div(className="flex", id="gcp_card", n_clicks=0),
                    html.Div(className="flex", id="k8s_card", n_clicks=0),
                    html.Div(className="flex", id="m365_card", n_clicks=0),
                ],
                className=f"grid gap-x-4 mb-[30px] sm:grid-cols-2 lg:grid-cols-{amount_providers}",
            ),
            html.H4(
                "Count of Findings by severity",
                className="text-prowler-stone-900 text-lg font-bold mb-[30px]",
            ),
            html.Div(
                [
                    html.Div(
                        className="flex flex-col col-span-12 sm:col-span-6 lg:col-span-3 gap-y-4",
                        id="status_graph",
                    ),
                    html.Div(
                        className="flex flex-col col-span-12 sm:col-span-6 lg:col-span-3 gap-y-4",
                        id="two_pie_chart",
                    ),
                    html.Div(
                        className="flex flex-col col-span-12 sm:col-span-6 lg:col-span-6 col-end-13 gap-y-4",
                        id="line_plot",
                    ),
                ],
                className="grid gap-x-4 grid-cols-12 mb-[30px]",
            ),
            html.Div(
                [
                    html.H4(
                        "Top Findings by Severity",
                        className="text-prowler-stone-900 text-lg font-bold",
                    ),
                    html.Div(
                        [
                            html.Label(
                                "Search:",
                                className="text-prowler-stone-900 font-bold text-sm",
                                style={"margin-right": "10px"},
                            ),
                            dcc.Input(
                                id="search-input",
                                type="text",
                                placeholder="Search by check title, service, region...",
                                debounce=True,
                                style={
                                    "padding": "4px 8px",
                                    "border": "1px solid #ccc",
                                    "borderRadius": "4px",
                                    "marginRight": "20px",
                                    "width": "250px",
                                },
                            ),
                            html.Label(
                                "Table Rows:",
                                className="text-prowler-stone-900 font-bold text-sm",
                                style={"margin-right": "10px"},
                            ),
                            table_row_dropdown,
                            download_button_csv,
                            download_button_xlsx,
                        ],
                        className="flex justify-between items-center",
                    ),
                    dcc.Download(id="download-data"),
                ],
                className="flex justify-between items-center",
            ),
            table_div_header,
            html.Div(id="table", className="grid"),
        ],
        className="grid gap-x-8 2xl:container mx-auto",
    )


def create_layout_compliance(
    account_dropdown: html.Div,
    date_dropdown: html.Div,
    region_dropdown: html.Div,
    compliance_dropdown: html.Div,
) -> html.Div:
    return html.Div(
        [
            dcc.Location(id="url", refresh=False),
            html.Div(
                [
                    html.H1(
                        "Compliance",
                        className="text-prowler-stone-900 text-2xxl font-bold",
                    ),
                    html.A(
                        [
                            html.Img(src="assets/favicon.ico", className="w-5 mr-3"),
                            html.Span("Subscribe to Prowler Cloud"),
                        ],
                        href="https://prowler.pro/",
                        target="_blank",
                        className="text-prowler-stone-900 inline-flex px-4 py-2 text-xs font-bold uppercase transition-all rounded-lg text-gray-900 hover:bg-prowler-stone-900/10 border-solid border-1 hover:border-prowler-stone-900/10 hover:border-solid hover:border-1 border-prowler-stone-900/10",
                    ),
                ],
                className="flex justify-between border-b border-prowler-500 pb-3",
            ),
            html.Div(
                [
                    html.Div([date_dropdown], className=""),
                    html.Div([account_dropdown], className=""),
                    html.Div([region_dropdown], className=""),
                    html.Div([compliance_dropdown], className=""),
                ],
                className="grid gap-x-4 gap-y-4 sm:grid-cols-2 lg:grid-cols-4 lg:gap-y-0",
            ),
            html.Div(
                [
                    html.Div(
                        className="flex flex-col col-span-12 md:col-span-4 gap-y-4",
                        id="overall_status_result_graph",
                    ),
                    html.Div(
                        className="flex flex-col col-span-12 md:col-span-7 md:col-end-13 gap-y-4",
                        id="security_level_graph",
                    ),
                    html.Div(
                        className="flex flex-col col-span-12 md:col-span-2 gap-y-4",
                        id="",
                    ),
                ],
                className="grid gap-x-4 gap-y-4 grid-cols-12 lg:gap-y-0",
            ),
            html.H4(
                "Details compliance:",
                className="text-prowler-stone-900 text-lg font-bold",
            ),
            html.Div(className="flex flex-wrap", id="output"),
        ],
        className="grid gap-x-8 gap-y-8 2xl:container mx-auto",
    )
