// material-ui
import * as React from 'react';
import {FiDataGrid} from "components/FiDataGrid";
import {
    Button,
    // Typography, 
    useMediaQuery
} from '@mui/material';
import * as DateUtils from "utils/DateUtils"
import {useNavigate} from "react-router-dom";
import {
    isORGLoggedIn,
    isDummyLoggedIn,
  } from "utils/Utils";
import {useTheme} from "@emotion/react";
import {getStatusIntl,getModeIntl } from "utils/statusUtils/PublicNoteStatusUtils";
import {FormattedMessage, useIntl} from "react-intl";

// ==============================|| EVENT TABLE ||============================== //

export default function BaseGrid({setCount, url}) {
    const navigate = useNavigate()
    const theme = useTheme();
    const isMdOrLg = useMediaQuery(theme.breakpoints.up('md'));
    const intl = useIntl();

    const handleDetailClick = (params) => () => {
        navigate('/publicNotice/'+ params.id);
    };

    const renderHeaderWithAria = (params) => (
        <span aria-label={params.colDef.headerName}>{params.colDef.headerName}</span>
    );

    const columns = [
        {
            id: 'appNo',
            field: 'appNo',
            headerName: intl.formatMessage({id: 'applicationId'}),
            width: isMdOrLg ? 'auto' : 160,
            flex: isMdOrLg ? 1 : undefined,
            renderHeader: renderHeaderWithAria,
            renderCell: (params) => {
                return params.row.appNo + getModeIntl(params, intl);
            },
        },
        {
            id: 'created',
            field: 'created',
            headerName: intl.formatMessage({id: 'submitDate'}),
            width: isMdOrLg ? 'auto' : 300,
            flex: isMdOrLg ? 1 : undefined,
            renderHeader: renderHeaderWithAria,
            valueGetter:(params)=>{
                return DateUtils.datetimeStr(params?.value);
            }
        },
    
        {
            id: 'remarks',
            field: 'remarks',
            headerName:  isORGLoggedIn()? intl.formatMessage({id: 'gazetteCount2_1'}) : intl.formatMessage({id: 'myRemarks'}),
            width: isMdOrLg ? 'auto' : 400,
            flex: isMdOrLg ? 3 : undefined,
            renderHeader: renderHeaderWithAria,
            renderCell: (params) => (
                isORGLoggedIn()? 
                    isDummyLoggedIn()?
                        <div>
                            <FormattedMessage id="gazetteCount" />: {params.row.issueVolume + "/" + params.row.issueYear
                                + " No. " + params.row.issueNo}<br />
                            GLD: {params.row.custName} <br />
                            <FormattedMessage id="careOf" />: {params.row.careOf} <br />
                            <FormattedMessage id="myRemarks" />: {params.row.remarks}
                        </div>:
                        <div>
                            <FormattedMessage id="gazetteCount" />: {params.row.issueVolume + "/" + params.row.issueYear
                                + " No. " + params.row.issueNo}<br />
                            <FormattedMessage id="careOf" />: {params.row.careOf} <br />
                            <FormattedMessage id="myRemarks" />: {params.row.remarks}
                        </div> 
                :
                <div>
                    <FormattedMessage id="gazetteCount" />: {params.row.issueVolume + "/" + params.row.issueYear
                            + " No. " + params.row.issueNo}<br />
                    <FormattedMessage variant="pnspsNormalText" id="myRemarks"/>:{params.row.remarks}
                    {/* <Typography variant="pnspsNormalText">{params.row.remarks}</Typography> */}
                </div>
              )
        },
        {
            id: 'status',
            field: 'status',
            headerName: intl.formatMessage({id: 'status'}),
            width: isMdOrLg ? 'auto' : 160,
            flex: isMdOrLg ? 1 : undefined,
            renderHeader: renderHeaderWithAria,
            renderCell: (params) => {
                return getStatusIntl(params, intl);
            },
        },
        {
            field: 'actions',
            headerName: '',
            width: 160,
            renderHeader: renderHeaderWithAria,
            cellClassName: 'actions',
            renderCell: (params) => {
                return <Button aria-label={intl.formatMessage({id: 'viewDetail'})} onClick={handleDetailClick(params)}>
                    <FormattedMessage id="viewDetail"/>
                </Button>;
            },
        }
    ];
    
    function handleRowDoubleClick(params) {
        navigate('/publicNotice/'+ params.id);
    }

    return (
        <div style={{minHeight: 400, height:"100%", width: '100%', padding: 4}}>
            <FiDataGrid
                columns={columns}
                customPageSize={10}
                onRowDoubleClick={handleRowDoubleClick}
                getRowHeight={() => 'auto'}
                doLoad={React.useMemo(() => ({
                    url: url,
                    params:{},
                    callback:(responseData)=>{
                        setCount(responseData.count??0);
                    }
                }), [url])}
            />
        </div>
    );
}
