part of book_detail;



class BookDetailPage extends StatefulWidget {
  final String bookId;
  const BookDetailPage({
    Key? key,
    required this.bookId
  }) : super(key: key);

  @override
  State<BookDetailPage> createState() => _BookDetailPageState();
}

class _BookDetailPageState extends State<BookDetailPage> with SingleTickerProviderStateMixin{


  @override
  Widget build(BuildContext context) {
    return GetBuilder<BookDetailController>(
      init:BookDetailController(widget.bookId),
      builder: (controller)=> WillPopScope(
        onWillPop: () async {
          context.pop(true);
          return false;
        },
        child: Scaffold(
          appBar:  CustomAppBar(
            backgroundColor: const Color(0xFFAB1941).withOpacity(0.02),
            title: const Text('详情',style: TextStyle(fontSize: 17),),
            actions: [
              CustomButton.icon(
                padding: EdgeInsets.zero,
                backgroundColor: Colors.transparent,
                icon: Image.asset('assets/images/shop.png'),
                onPressed: () => context.pushNamed(Routes.shop),
              ),
              CustomButton.icon(
                padding: EdgeInsets.zero,
                backgroundColor: Colors.transparent,
                icon: Image.asset(
                  controller.bookDetails.isCollection == 0? 'assets/images/unlove.png':'assets/images/love.png',
                ),
                onPressed: () {
                  controller.love(bookId: controller.bookDetails.bookId.toString(), isCollection: controller.bookDetails.isCollection!);
                },
              ),
            ],
          ),
          body:
          Column(
            children: [
              BuildBook(model: controller.bookDetails,),
              Container(
                height: 10.w,
                color: const Color(0xFFF9F9F9),
              ),
              BuildStudy(model:controller.bookDetails,),
              Container(
                height: 2,
                color: const Color(0xFFF9F9F9),
              ),
              Container(
                color: Colors.white,
                child: TabBar(
                  labelColor: AppTheme.primary,
                  // isScrollable: true,
                  labelStyle: TextStyle(fontSize: 15.w,height: 1.4,fontWeight: Fonts.boldSemi),
                  unselectedLabelColor: Colours.c9,
                  unselectedLabelStyle: TextStyle(fontSize: 15.w,height: 1.4),
                  indicatorSize: TabBarIndicatorSize.label,
                  indicatorColor: AppTheme.primary,
                  tabs:controller.tabs,
                  physics: const NeverScrollableScrollPhysics(),
                  controller: controller.tabController,
                ),
              ),
              Container(
                height: 1.w,
                color: const Color(0xFFF9F9F9),
              ),
              Container(
                height: 8.w,
                color: Colors.transparent,
              ),
              Expanded(
                child: TabBarView(
                  controller: controller.tabController,
                  physics: const NeverScrollableScrollPhysics(),
                  children: [
                    BookCategoryPage(
                      chapters: controller.chapters,
                      bookId: controller.bookId,
                      bookDetails: controller.bookDetails,
                      onTap: (ChapterModel chapterModel) async{
                        if(controller.bookDetails.isFree == 0  && controller.bookDetails.isHave ==0 && chapterModel.isReading ==0){
                          List<CourseModel> buy = [];
                          CourseModel model= CourseModel(
                              bookId: controller.bookDetails.bookId,
                              price: controller.bookDetails.price,
                              vipPrice: controller.bookDetails.vipPrice,
                              img: controller.bookDetails.img,
                              bookName: controller.bookDetails.bookName,
                              cartId: 0,
                              status: 1,
                              selected: true
                          );
                          buy.add(model);

                          final  result =  await context.pushNamed(Routes.bookPay,extra: buy);
                          if (result == true) {
                            controller.getBookDetails();
                          }
                        }else{
                          final PopBackModel? backModel = await context.pushNamed(Routes.web,queryParameters: {'book_id': controller.bookDetails.bookId.toString(),'chapter_id': chapterModel.id.toString(),'chapter_name':chapterModel.name.toString(),'note_id':'0'},extra: controller.bookDetails);
                          if (backModel!.back == true){
                            controller.getChapters();
                            // controller.setCurrentReadChapterId(backModel!.chapterId);
                            controller.currentChapterId = int.parse(backModel!.chapterId);
                            controller.getBookDetails();
                          }
                        }
                      },
                    ),
                    SingleChildScrollView(
                      child: Container(
                        padding: EdgeInsets.only(left: 15.w,right: 15.w,top:12.w),
                        color: Colors.white,
                        child: Text(controller.bookDetails.introduction??'',style: const TextStyle(fontSize: 15,height: 2.1,color: Colours.c9),),
                      ),
                    ),
                    InAppWebView(
                      contextMenu: ContextMenu(
                        options: ContextMenuOptions(hideDefaultSystemContextMenuItems: true),
                      ),
                      onWebViewCreated: (InAppWebViewController wcontroller){

                        wcontroller.loadData(data: """
                        <!DOCTYPE html>
                        <html lang="zh-CN">
                        <head>
                        <meta charset="utf-8" />
                        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
                        <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
                        <meta http-equiv="Cache-Control" content="no-transform" />
                        <meta http-equiv="Cache-Control" content="no-siteapp" />
                        <style>
                             *{ margin: 0px; padding: 5px; font-size:16px}
                             html{ font-size: 10px;}
                             body{ padding:0px}
                             body p{ font-size: 1.5rem; line-height:2.4rem;color: #999}
                             img,video,pre,code{ max-width:100%}
                             pre{white-space: pre-wrap;word-wrap: break-word;word-break: break-all}
                             hr{background-color: var(--w-e-textarea-border-color); border: 0; display: block; height: 1px}
                             table, td {border: 1px solid #ccc;border-collapse: collapse;}
                             ol, ol li{margin:10px}
                             ul, ul li{margin:10px}
                        </style>
                        </head>
                        <body>
                            ${controller.bookDetails.content}
                        </body>
                        </html>
                        """,);
                      },
                    ),
                    BookInfoPage(model:controller.bookDetails,)
                  ],
                ),
              ),

            ],
          ),
          bottomNavigationBar: SafeArea(
            child: Container(
              color: Colors.white,
              padding: EdgeInsets.symmetric(horizontal: 15.w,vertical: 10.w),
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: [
                  Expanded(
                    child: GestureDetector(
                      onTap: (){
                        if(controller.bookDetails.isHave ==1 || controller.bookDetails.isFree == 1){
                          context.pushNamed(Routes.studyReport,queryParameters: {'book_id':widget.bookId});
                        }
                        else{
                          controller.addCart(widget.bookId);
                        }
                      },
                      child: Container(
                        alignment: Alignment.center,
                        height: 35,
                        decoration: BoxDecoration(
                          borderRadius: BorderRadius.circular(17.5.w),
                          border:Border.all(
                            width: 0.5,
                            color: Colours.c9
                          ),
                          // color: Colours.cE0.withOpacity(0.5),
                        ),
                        // padding: EdgeInsets.symmetric(vertical: 8),
                        child: controller.bookDetails.isHave ==1 || controller.bookDetails.isFree == 1? Text('学习报告',style: TextStyle(fontSize: 13.w,color: Colours.c9,height: 1.5),):Text('加入书架',style: TextStyle(fontSize: 13.w,color: AppTheme.primary,height: 1.5),),
                      ),
                    ),
                  ),
                  Gaps.hGaps10,
                  Expanded(
                    child: GestureDetector(
                      onTap: () async{

                        // 1免费 0 不免费
                        if(controller.bookDetails.isFree == 1){
                          final String chapterId = await controller.getCurrentChapterId();
                          final String chapterName = await controller.getCurrentChapterName();
                          final PopBackModel? backModel = await context.pushNamed(Routes.web,queryParameters: {'book_id': controller.bookDetails.bookId.toString(),'chapter_id': chapterId,'chapter_name':chapterName,'note_id':'0'},extra: controller.bookDetails);
                          if (backModel!.back == true){
                            controller.getChapters();
                            controller.currentChapterId = int.parse(backModel!.chapterId);
                            controller.getBookDetails();
                            // controller.setCurrentReadChapterId(backModel!.chapterId);
                          }
                        }
                        else {
                          // 没有购买
                          if (controller.bookDetails.isHave ==0){
                             // 没有试读
                             if (controller.bookDetails.readChapterId ==0){
                               List<CourseModel> buy = [];
                               CourseModel model= CourseModel(
                                   bookId: controller.bookDetails.bookId,
                                   price: controller.bookDetails.price,
                                   vipPrice: controller.bookDetails.vipPrice,
                                   img: controller.bookDetails.img,
                                   bookName: controller.bookDetails.bookName,
                                   cartId: 0,
                                   status: 1,
                                   selected: true
                               );
                               buy.add(model);

                               final  result =  await context.pushNamed(Routes.bookPay,extra: buy);
                               if (result == true) {
                                 controller.getBookDetails();
                               }
                             }
                             else{
                               final String chapterId = await controller.getCurrentChapterId();
                               final String chapterName = await controller.getCurrentChapterName();
                               final PopBackModel? backModel =  await context.pushNamed(Routes.web,queryParameters: {'book_id': controller.bookDetails.bookId.toString(),'chapter_id': chapterId,'chapter_name':chapterName,'note_id':'0'},extra: controller.bookDetails);
                               if (backModel!.back == true){
                                 controller.getChapters();
                                 controller.getBookDetails();
                                 controller.currentChapterId = int.parse(backModel!.chapterId);
                                 // controller.setCurrentReadChapterId(backModel!.chapterId);
                               }
                             }
                          }
                          else{

                            final String chapterId = await controller.getCurrentChapterId();
                            final String chapterName = await controller.getCurrentChapterName();

                            final PopBackModel? backModel = await context.pushNamed(Routes.web,queryParameters: {'book_id': controller.bookDetails.bookId.toString(),'chapter_id': chapterId,'chapter_name':chapterName,'note_id':'0'},extra: controller.bookDetails);
                            if (backModel!.back == true){
                              controller.getChapters();
                              controller.currentChapterId = int.parse(backModel!.chapterId);
                              controller.getBookDetails();
                              // controller.setCurrentReadChapterId(backModel!.chapterId);
                            }

                          }
                        }
                      },
                      child: Container(
                        decoration: BoxDecoration(
                          borderRadius: BorderRadius.circular(17.5.w),
                          color: AppTheme.primary.withOpacity(0.1)
                        ),
                        height: 35.w,
                        alignment: Alignment.center,
                        padding:  EdgeInsets.symmetric(vertical: 8.w),
                        child:  Text('阅读',style: TextStyle(fontSize: 13.w,color: AppTheme.primary,height: 1.5,fontWeight: Fonts.boldSemi),),
                      ),
                    ),
                  )
                ],
              ),
            ),
          ),
        ),
      ),
    );

  }


}
