import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:m80app/components/app_hcservice_loading.dart';
import 'package:m80app/components/dialog_errorterminal.dart';
import 'package:m80app/components/dialog_processing_complete.dart';
import 'package:m80app/services/api_status.dart';
import 'package:m80app/services/grpc/hcservice/hcservice.pb.dart';
import 'package:m80app/services/grpc_apis.dart';
import 'package:m80app/setting/setting.dart';
import 'package:m80app/utils/log_utils.dart';
import 'package:m80app/constants/route_paths_constants.dart' as routes;
import 'package:m80app/constants/constants.dart' as constants;
import 'package:m80app/utils/parsers.dart';
import 'package:m80app/viewmodels/hcloading_viewmodel.dart';
import 'package:m80app/viewmodels/mainpage_viewmodel.dart';
import 'package:m80app/views/investigationpage/investigation_page.dart';
import 'package:provider/provider.dart';
const OpeningProcessNotOK = 0;
const OpeningProcessOK = 1;
const MessOpeningProcessOK = 'Opening process carried out: Ok';
const MessOpeningProcessnotOK = 'Opening process carried out: Not OK';
const MessOpeningProcessUnknown = 'Opening process carried out: Unknown status';
class OpenningTestPage extends StatefulWidget {
const OpenningTestPage({super.key});
@override
State<OpenningTestPage> createState() => _OpenningTestPageState();
}
class _OpenningTestPageState extends State<OpenningTestPage> {
String StatusMessage = '';
void initState() {
super.initState();
timeController.text = constants.DATE_INPUT_FORMATTER.format(DateTime.now());
}
void TestingLoading(HCLoadingViewModel hcLoadingViewModel) async {
bool isContinueSendFY = true;
bool isSendFYOk = false;
showDialog(
context: context,
builder: (BuildContext context) {
return LoadHCDialog(
viewModel: hcLoadingViewModel,
);
});
while (isContinueSendFY) {
var dtnow = DateTime.now();
hcLoadingViewModel.addLog(
'${dtnow.hour.toString().padLeft(2, '0')}:${dtnow.minute} FY送信');
var req = FYRequestMessage(
commandId: "FY",
protocol: Setting.m80serviceConfig.hcserviceProtocol,
headerDestinationIpAddr:
Setting.m80serviceConfig.hcserviceDestIpAddress,
headerModelType: Setting.m80serviceConfig.hcserviceDestModeltype,
headerEquipmentNumber: Setting.m80serviceConfig.hcserviceDestEquipnum,
testModeTransmissionMode: 1,
formatInformation: 0,
employeeNumber: 0);
hcLoadingViewModel.setprocessValue(0.2);
var fYRes = await GrpcApis.sendFY(req);
bool isRequestFail = false;
String errMessage = '';
String displayMessage = '';
if (fYRes is FYResponseMessage) {
if (fYRes.err == false) {
int processstatus =
getByteDataOf(fYRes.dataresponse.sublist(44, 45)).getUint8(0);
if (processstatus == OpeningProcessNotOK) {
print(MessOpeningProcessOK);
displayMessage = MessOpeningProcessnotOK;
} else if (processstatus == OpeningProcessOK) {
displayMessage = MessOpeningProcessOK;
} else {
displayMessage = MessOpeningProcessUnknown;
}
isContinueSendFY = false;
isSendFYOk = true;
hcLoadingViewModel.addLog(
'${dtnow.hour.toString().padLeft(2, '0')}:${dtnow.minute.toString().padLeft(2, '0')} FY受信...AckOK');
} else {
isRequestFail = true;
hcLoadingViewModel.addLog(
'${dtnow.hour.toString().padLeft(2, '0')}:${dtnow.minute.toString().padLeft(2, '0')} FY受信...AckFail');
errMessage = "Request FY via GRPC error : ${fYRes.errMsg}";
}
}
if (fYRes is Failure) {
isRequestFail = true;
hcLoadingViewModel.addLog(
'${dtnow.hour.toString().padLeft(2, '0')}:${dtnow.minute.toString().padLeft(2, '0')} FY受信...AckFail');
errMessage =
"Request FY via GRPC error : ${fYRes.errorResponse.toString()}";
log("Request FY via GRPC error : ${fYRes.errorResponse.toString()}");
Logger.error(
"Request FY via GRPC error : ${fYRes.errorResponse.toString()}");
}
setState(() {
StatusMessage +=
"${timeController.text} ${dtnow.hour.toString().padLeft(2, '0')}:${dtnow.minute.toString().padLeft(2, '0')}:${dtnow.second.toString().padLeft(2, '0')} : ${displayMessage}${isRequestFail ? "Error: ${errMessage}" : ''}\n";
});
if (isSendFYOk) {
hcLoadingViewModel.setprocessValue(1);
await showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
return ProcessingCompleteDialog(
title: 'テストモード確認',
contentcomplete: 'テスト開店処理が完了しました。',
);
});
} else {
isContinueSendFY = await showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
return ErrorTerminalDialog(
title: '終了確認', codeerrorterminal: 'XXXXXX');
});
if (!isContinueSendFY) hcLoadingViewModel.setprocessValue(1);
}
}
}
@override
Widget build(BuildContext context) {
MainPageViewModel mainpageViewModel = context.watch<MainPageViewModel>();
HCLoadingViewModel hcLoadingViewModel = context.watch<HCLoadingViewModel>();
return Column(children: [
const SizedBox(
height: 30,
),
SizedBox(
width: constants.CONTENT_WIDTH,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
OutlinedButton(
onPressed: () async {
TestingLoading(hcLoadingViewModel);
},
style: ElevatedButton.styleFrom(
backgroundColor: constants.COLOR_YELLOW,
foregroundColor: const Color(0xFF28899E),
fixedSize: const Size(275, 100),
textStyle: constants.TEXT_STYLE,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(37)),
),
child: Text('テスト開店')),
],
),
),
const SizedBox(
height: 20,
),
Container(
height: 320,
color: constants.COLOR_GREY,
margin: const EdgeInsets.all(10),
padding: const EdgeInsets.all(10),
child: Stack(children: [
Column(children: [
Expanded(
child: ListView(children: [
Column(children: [
Container(
alignment: Alignment.topLeft,
child: Text(
StatusMessage,
style: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
)
])
]))
])
])),
SizedBox(
width: constants.CONTENT_WIDTH,
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
OutlinedButton(
onPressed: () {
mainpageViewModel.setcurrentRoute(routes.DailyTotalMenuRoute);
mainpageViewModel.settitleList(['日計モード']);
},
style: ElevatedButton.styleFrom(
backgroundColor: constants.COLOR_YELLOW,
foregroundColor: const Color(0xFF28899E),
fixedSize: const Size(120, 100),
textStyle: constants.TEXT_STYLE,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(37)),
),
child: const Text('戻る')),
],
),
),
]);
}
}