import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';

import 'alert_dialog.dart';

class VDialogTable extends StatelessWidget {
  final bool? isExistLocalData;
  const VDialogTable({
    super.key,
    this.title,
    required this.columnNames,
    required this.tableData,
    this.diagnosisTime,
    this.isExistLocalData = false,
  });
  final List<List<String>> tableData;
  final List<String> columnNames;
  final String? title;
  final String? diagnosisTime;
  Future<DateTime?> show<DateTime>() => VAlertDialog.showDialog<DateTime>(this);
  @override
  Widget build(BuildContext context) {
    return VAlertDialog(
      width: 800,
      contentPadding: const EdgeInsets.only(left: 16, right: 8),
      content: _buildTable(),
      showCancel: true,
    );
  }

  Widget _buildTable() {
    return SizedBox(
      height: 500,
      child: Column(
        children: [
          const SizedBox(
            height: 10,
          ),
          if (title != null)
            Text(
              title!,
              style: const TextStyle(
                fontSize: 22,
              ),
            ),
          const SizedBox(
            height: 10,
          ),
          Table(
            children: [
              TableRow(
                decoration: const BoxDecoration(
                  color: Color.fromRGBO(215, 234, 255, 1),
                ),
                children: columnNames
                    .map((columnName) => _buildHeaderCell(columnName))
                    .toList(),
              ),
            ],
          ),
          Expanded(
            child: Scrollbar(
              thumbVisibility: true,
              child: SingleChildScrollView(
                child: Table(
                  children: _buildRow(tableData),
                ),
              ),
            ),
          ),
          const SizedBox(
            height: 10,
          ),
          Container(
              alignment: Alignment.centerLeft,
              child: Text(
                "检测时间：${diagnosisTime ?? ''}",
                style: const TextStyle(fontSize: 18),
              )),
          const SizedBox(
            height: 10,
          ),
          Container(
              alignment: Alignment.centerLeft,
              child: const Text(
                '注：本结果仅对该检验样本负责！',
                style: TextStyle(fontSize: 18),
              ))
        ],
      ),
    );
  }

  List<TableRow> _buildRow(List<List<String>> tableData) {
    var tableRows = <TableRow>[];
    for (var i = 0; i < tableData.length; i++) {
      tableRows.add(
        TableRow(
          decoration: i % 2 == 0
              ? null
              : const BoxDecoration(
                  color: Color.fromRGBO(233, 244, 255, 1),
                ),
          children: tableData[i].map(
            (cellData) {
              if (tableData[i][1] == '心电测量') {
                return _buildImageDataCell(cellData);
              }

              return _buildDataCell(cellData);
            },
          ).toList(),
        ),
      );
    }
    return tableRows;
  }

  TableCell _buildHeaderCell(String title) {
    return TableCell(
      child: Container(
        padding: const EdgeInsets.symmetric(horizontal: 14),
        alignment: Alignment.centerLeft,
        height: 37,
        child: Text(
          title,
          style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
        ),
      ),
    );
  }

  TableCell _buildDataCell(String title) {
    return TableCell(
      child: Container(
        padding: const EdgeInsets.symmetric(horizontal: 14),
        alignment: Alignment.centerLeft,
        height: 37,
        child: Text(
          title,
          style: const TextStyle(fontSize: 14),
        ),
      ),
    );
  }

  TableCell _buildImageDataCell(String title) {
    if (title.length > 50) {
      Uint8List imageBytes = isExistLocalData!
          ? base64.decode(title)
          : base64.decode(
              "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=");
      return TableCell(
        child: InkWell(
          onTap: () {
            print(title);
            Get.dialog(
              ImagePreviewDialog(
                image: isExistLocalData!
                    ? Image.memory(
                        imageBytes,
                      )
                    : Image.network(title),
              ),
            );
          },
          child: Container(
            padding: const EdgeInsets.symmetric(horizontal: 14),
            alignment: Alignment.centerLeft,
            height: 57,
            child: isExistLocalData!
                ? Image.memory(
                    imageBytes,
                  )
                : Image.network(title),
          ),
        ),
      );
    }

    return TableCell(
      child: Container(
        padding: const EdgeInsets.symmetric(horizontal: 14),
        alignment: Alignment.centerLeft,
        height: 37,
        child: Text(
          title,
          style: const TextStyle(fontSize: 14),
        ),
      ),
    );
  }
}

class ImagePreviewDialog extends StatelessWidget {
  final Image image;

  const ImagePreviewDialog({super.key, required this.image});

  @override
  Widget build(BuildContext context) {
    return Dialog(
      child: SizedBox(
        width: 800,
        height: 500,
        child: image,
      ),
    );
  }
}
