import 'package:fis_jsonrpc/rpc.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:intl/intl.dart';
import 'package:vitalapp/components/appbar.dart';
import 'package:vitalapp/consts/styles.dart';
import 'package:vitalapp/pages/check/follow_up_record/controller.dart';
import 'package:vitalapp/pages/patient/list/widgets/status.dart';
import 'package:vitalapp/pages/widgets/record_common_item.dart';

class FollowUpRecordPage extends GetView<FollowUpRecordController> {
  const FollowUpRecordPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return GetBuilder(
        init: FollowUpRecordController(),
        id: "FollowUpRecord",
        builder: (_) {
          return Scaffold(
            backgroundColor: const Color.fromRGBO(238, 238, 238, 1),
            appBar: VAppBar(
              titleWidget: const Text('随访记录'),
            ),
            body: Stack(
              children: [
                Row(
                  mainAxisAlignment: MainAxisAlignment.start,
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    _buildDiagram(),
                    _buildListView(),
                  ],
                )
              ],
            ),
          );
        });
  }

  Widget _buildDiagram() {
    return Expanded(
      flex: 1,
      child: Padding(
        padding: const EdgeInsets.all(16.0).copyWith(right: 0),
        child: Container(
          // color: Colors.white,
          padding: const EdgeInsets.all(16),
          decoration: BoxDecoration(
            color: Colors.white,
            border: Border.all(
              color: Colors.white,
            ),
            borderRadius: GlobalStyles.borderRadius,
          ),
          child: Image.asset(
            'assets/images/exam/normalMeasurementChart.png',
            height: double.infinity,
            fit: BoxFit.fitWidth,
          ),
        ),
      ),
    );
  }

  Widget _buildListView() {
    return Expanded(
        flex: 2,
        child: Padding(
          padding: const EdgeInsets.all(16),
          child: RefreshIndicator(
              child: Obx(
                () {
                  final list = controller.state.followUpDTOList;
                  final children = <Widget>[];
                  for (var followUpDTO in list) {
                    for (var followUpRecordData
                        in followUpDTO.followUpRecordDatas!) {
                      var index = followUpDTO.followUpRecordDatas
                          ?.indexOf(followUpRecordData);

                      children.add(_followUpRecordCard(
                        index: index ?? 0,
                        dto: followUpDTO,
                        dataDto: followUpRecordData,
                      ));
                    }
                  }
                  return list.isEmpty
                      ? Container(
                          margin: const EdgeInsets.only(top: 80),
                          child: Column(
                            children: [
                              Center(
                                child: Image.asset(
                                  "assets/images/no_data.png",
                                  width: 300,
                                  height: 300,
                                  fit: BoxFit.cover,
                                ),
                              ),
                              const Text(
                                "暂无数据，先看看别的吧",
                                style: TextStyle(fontSize: 18),
                              ),
                            ],
                          ),
                        )
                      : GridView(
                          gridDelegate:
                              const SliverGridDelegateWithFixedCrossAxisCount(
                            crossAxisCount: 1,
                            mainAxisSpacing: 16,
                            crossAxisSpacing: 20,
                            childAspectRatio: 900 / 180,
                          ),
                          children: children,
                        );
                },
              ),
              onRefresh: () async {}),
        ));
  }
}

// ignore: camel_case_types
class _followUpRecordCard extends StatelessWidget {
  final FollowUpRecordDTO dto;
  final FollowUpRecordDataDTO dataDto;
  final int index;
  _followUpRecordCard({
    required this.dto,
    required this.dataDto,
    required this.index,
  });
  final controller = Get.find<FollowUpRecordController>();
  @override
  Widget build(BuildContext context) {
    final body = Stack(
      children: [
        Row(
          children: [
            Expanded(
              flex: 10,
              child: Container(
                padding: const EdgeInsets.symmetric(
                  horizontal: 30,
                  vertical: 12,
                ),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    const SizedBox(
                      height: 8,
                    ),
                    LayoutBuilder(builder: (context, c) {
                      final width = c.maxWidth - 100;
                      return SizedBox(
                        width: width,
                        child: _buildBaseInfoRow(),
                      );
                    }),
                    const SizedBox(
                      height: 20,
                    ),
                    Wrap(
                      alignment: WrapAlignment.start,
                      spacing: 20,
                      runSpacing: 8,
                      children: [
                        SizedBox(
                          width: 300,
                          child: RecordCommonItem(
                            itemName: '姓名',
                            itemValue: dto.patientName ?? "",
                            fontSize: 18,
                          ),
                        ),
                        RecordCommonItem(
                          itemName: '随访类型',
                          itemValue:
                              controller.getFollowUpMode(dataDto.followUpMode),
                          fontSize: 18,
                        ),
                      ],
                    ),
                    const SizedBox(
                      height: 20,
                    ),
                    Wrap(
                      alignment: WrapAlignment.start,
                      spacing: 20,
                      runSpacing: 8,
                      children: [
                        SizedBox(
                          width: 300,
                          child: RecordCommonItem(
                            itemName: '随访医生',
                            itemValue: dto.contractedDoctor ?? "",
                            fontSize: 18,
                          ),
                        ),
                        RecordCommonItem(
                          itemName: '随访时间',
                          itemValue: dataDto.followUpTime != null
                              ? DateFormat("yyyy-MM-dd")
                                  .format(dataDto.followUpTime!.toLocal())
                              : "",
                          fontSize: 18,
                        ),
                      ],
                    )
                  ],
                ),
              ),
            ),
            Expanded(
              child: Icon(
                Icons.keyboard_arrow_right,
                size: 64,
                color: Colors.grey.shade400,
              ),
            )
          ],
        ),
        Positioned(
          top: 16,
          right: 0,
          child: _FollowUpRecordSignStatusTag(
            dto: dto,
          ),
        ),
        Positioned(
          bottom: 16,
          right: 12,
          child: IconButton(
            icon: Icon(
              Icons.edit,
              size: 26,
              color: Theme.of(context).primaryColor,
            ),
            onPressed: () {
              controller.toCheckPage(dataDto); //跳转到随访页面
            },
          ),
        ),
      ],
    );
    return Material(
      borderRadius: GlobalStyles.borderRadius,
      child: Ink(
        decoration: BoxDecoration(
          color: Colors.white,
          borderRadius: GlobalStyles.borderRadius,
        ),
        child: InkWell(
          borderRadius: GlobalStyles.borderRadius,
          onTap: () {
            controller.toFollowUpDetailPage(index, dto);
            // controller.toCheckPage(dataDto); //跳转到随访页面
          },
          child: body,
        ),
      ),
    );
  }

  Widget _buildBaseInfoRow() {
    return SizedBox(
      child: RecordCommonItem(
        itemName: '随访病症',
        itemValue: controller.getFollowUpValueByKey(dataDto.key ?? ""),
        fontSize: 20,
      ),
    );
  }
}

// ignore: camel_case_types
class _FollowUpRecordSignStatusTag extends StatelessWidget {
  final FollowUpRecordDTO dto;

  _FollowUpRecordSignStatusTag({required this.dto});
  final controller = Get.find<FollowUpRecordController>();
  @override
  Widget build(BuildContext context) {
    return Container(
      alignment: Alignment.centerRight,
      width: 120,
      child: StatusLabel(
        title: controller.followUpStateTransition(dto.followUpState),
        color: controller.followUpStateColors(dto.followUpState),
      ),
    );
  }
}
