import 'dart:convert';
import 'dart:typed_data';

import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/viewModel/medicine_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart';
import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart';
import 'package:flutter/material.dart';
import 'package:maps_launcher/maps_launcher.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';

DrAppSharedPreferances sharedPref = DrAppSharedPreferances();

class PharmaciesListScreen extends StatefulWidget {
  final int itemID;

  final String url;

  // In the constructor, require a item id.
  PharmaciesListScreen({Key key, @required this.itemID, this.url})
      : super(key: key);

  @override
  _PharmaciesListState createState() => _PharmaciesListState();
}

class _PharmaciesListState extends State<PharmaciesListScreen> {
  var _data;
  Helpers helpers = new Helpers();
  ProjectViewModel projectsProvider;

  bool _isInit = true;
  //bool _isOutOfStuck = false;

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    _isInit = false;
  }

  @override
  Widget build(BuildContext context) {
    projectsProvider = Provider.of(context);
    return BaseView<MedicineViewModel>(
      onModelReady: (model) => model.getPharmaciesList(widget.itemID),
      builder: (_, model, w) => AppScaffold(
        baseViewModel: model,
        appBarTitle: TranslationBase.of(context).pharmaciesList,
        body: Container(
          height: SizeConfig.screenHeight,
          child: ListView(
              shrinkWrap: true,
              scrollDirection: Axis.vertical,
              physics: const AlwaysScrollableScrollPhysics(),
              children: <Widget>[
                model.pharmaciesList.length > 0
                    ? RoundedContainer(
                    child: Row(
                      children: <Widget>[
                        Expanded(
                          flex: 1,
                          child: ClipRRect(
                            borderRadius:
                            BorderRadius.all(Radius.circular(7)),
                            child: widget.url != null
                                ? Image.network(
                              widget.url,
                              height:
                              SizeConfig.imageSizeMultiplier *
                                  21,
                              width:
                              SizeConfig.imageSizeMultiplier *
                                  20,
                              fit: BoxFit.cover,
                            ): Container(),
                          ),
                        ),
                        Expanded(
                          flex: 3,
                          child: Column(
                            mainAxisAlignment:
                            MainAxisAlignment.start,
                            crossAxisAlignment:
                            CrossAxisAlignment.stretch,
                            children: <Widget>[
                              AppText(
                                TranslationBase.of(context)
                                    .description,
                                marginLeft: 10,
                                marginTop: 0,
                                marginRight: 10,
                                marginBottom: 2,
                                fontWeight: FontWeight.bold,
                              ),
                              AppText(
                                model.pharmaciesList[0]["ItemDescription"],
                                marginLeft: 10,
                                marginTop: 0,
                                marginRight: 10,
                                marginBottom: 10,
                              ),
                              AppText(
                                TranslationBase.of(context).price,
                                marginLeft: 10,
                                marginTop: 0,
                                marginRight: 10,
                                marginBottom: 2,
                                fontWeight: FontWeight.bold,
                              ),
                              AppText(
                                model.pharmaciesList[0]["SellingPrice"]
                                    .toString(),
                                marginLeft: 10,
                                marginTop: 0,
                                marginRight: 10,
                                marginBottom: 10,
                              ),
                            ],
                          ),
                        )
                      ],
                    )): Container(),
                Container(
                  margin: EdgeInsets.only(
                    top: SizeConfig.widthMultiplier * 2,
                    bottom: SizeConfig.widthMultiplier * 2,
                    right: SizeConfig.widthMultiplier * 4,
                    left: SizeConfig.widthMultiplier * 4,
                  ),
                  child: Align(
                    alignment: Alignment.centerLeft,
                    child: AppText(
                      TranslationBase.of(context).youCanFindItIn,
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                  alignment: projectsProvider.isArabic
                      ? Alignment.topRight
                      : Alignment.topLeft,
                ),
                Expanded(
                  child: Container(
                    width: SizeConfig.screenWidth * 0.99,
                    child: ListView.builder(
                        shrinkWrap: true,
                        physics: const NeverScrollableScrollPhysics(),
                        itemCount: model.pharmaciesList == null ? 0 : model
                            .pharmaciesList.length,
                        itemBuilder: (BuildContext context, int index) {
                          return RoundedContainer(
                            child: Row(
                              children: <Widget>[
                                Expanded(
                                  flex: 1,
                                  child: ClipRRect(
                                    borderRadius:
                                    BorderRadius.all(Radius.circular(7)),
                                    child: Image.network(
                                      model
                                          .pharmaciesList[index]["ProjectImageURL"],
                                      height:
                                      SizeConfig.imageSizeMultiplier * 15,
                                      width:
                                      SizeConfig.imageSizeMultiplier * 15,
                                      fit: BoxFit.cover,
                                    ),
                                  ),
                                ),
                                Expanded(
                                  flex: 4,
                                  child: AppText(
                                    model
                                        .pharmaciesList[index]["LocationDescription"],
                                    margin: 10,
                                  ),
                                ),
                                Expanded(
                                  flex: 2,
                                  child: Wrap(
                                    direction: Axis.horizontal,
                                    alignment: WrapAlignment.end,
                                    crossAxisAlignment: WrapCrossAlignment.end,
                                    children: <Widget>[
                                      Padding(
                                        padding: EdgeInsets.all(5),
                                        child: InkWell(
                                          child: Icon(
                                            Icons.call,
                                            color: Colors.red,
                                          ),
                                          onTap: () =>
                                              launch("tel://" +
                                                  model
                                                      .pharmaciesList[index]["PhoneNumber"]),
                                        ),
                                      ),
                                      Padding(
                                        padding: EdgeInsets.all(5),
                                        child: InkWell(
                                          child: Icon(
                                            Icons.pin_drop,
                                            color: Colors.red,
                                          ),
                                          onTap: () {
                                            MapsLauncher.launchCoordinates(
                                                double.parse(
                                                    model
                                                        .pharmaciesList[index]["Latitude"]),
                                                double.parse(
                                                    model
                                                        .pharmaciesList[index]["Longitude"]),
                                                model.pharmaciesList[index]
                                                ["LocationDescription"]);
                                          },
                                        ),
                                      ),
                                    ],
                                  ),
                                ),
                              ],
                            ),
                          );
                        }),
                  ),
                )
              ]),
        ),),);
  }


  Image imageFromBase64String(String base64String) {
    return Image.memory(base64Decode(base64String));
  }

  //TODO CHECK THE URL IS NULL OR NOT
  Uint8List dataFromBase64String(String base64String) {
    if(base64String !=null)
      return base64Decode(base64String);
  }

  String base64String(Uint8List data) {
    return base64Encode(data);
  }
}
