import 'dart:async';
import 'dart:convert';

import 'package:http/http.dart' as http;

import '../AccessRight/accessrightmodels.dart';
import '../restmodels.dart';
    
class AccessRight
{
    String restUri = '';
    LoginRespData loginResp = null;

    void Function(LoginRespData) onLoginResp = null;

    AccessRight(String restUri)
    {
        this.restUri = restUri;
    }

    Future<LoginRespData> UserLogin(String userId, String password) async {
        var resturl = restUri + '/apiCustomer/accessRight/userLogin';

        final response = await http.post(
          Uri.parse(resturl),
          headers: <String, String>{
            'Content-Type': 'application/json; charset=UTF-8',
          },
          body: jsonEncode(<String, String>{
            'userId': userId,
            'password': password
          }),
        );

        var dd = RestLoginResp.fromJson(jsonDecode(response.body));

        if (dd != null)
        {
            loginResp = dd.data;
            if (onLoginResp != null) onLoginResp(loginResp);
            return loginResp;
        }
        return null;
    }

    Future<LoginRespData> UserLogin2FA(int code, {int mode = 3}) async {
        var resturl = restUri + '/apiCustomer/accessRight/userLogin2FA';

        final response = await http.post(
          Uri.parse(resturl),
          headers: <String, String>{
            'Content-Type': 'application/json; charset=UTF-8',
          },
          body: jsonEncode(<String, dynamic>{
            'accNo': loginResp.accNo,
            'code': code,
            'mode': mode,
            'systemId': loginResp.systemId,
            'userId': loginResp.userId,
          }),
        );

        var dd = RestLoginResp.fromJson(jsonDecode(response.body));

        if (dd != null)
        {
            loginResp = dd.data;
            if (onLoginResp != null) onLoginResp(loginResp);
            return loginResp;
        }
        return null;
    }    

     Future<bool> SessionTokenHeartbeat() async  {
        var resturl = restUri + '/apiCustomer/accessRight/sessionTokenHeartbeat';

        final response = await http.post(
            Uri.parse(resturl),
            headers: <String, String>{
              'Content-Type': 'application/json; charset=UTF-8',
            },
            body: jsonEncode(<String, String>{
              'sessionToken': loginResp.sessionToken,
            }),
        );

        var dd = RestGenResp.fromJson(jsonDecode(response.body));
        if (dd.result_code == '0')
          return true;

        return false;
    }

     Future<bool> UserLogout() async  {
        var resturl = restUri + '/apiCustomer/accessRight/userLogout';

        final response = await http.post(
            Uri.parse(resturl),
            headers: <String, String>{
              'Content-Type': 'application/json; charset=UTF-8',
            },
            body: jsonEncode(<String, String>{
              'sessionToken': loginResp.sessionToken,
            }),
        );

        var dd = RestGenResp.fromJson(jsonDecode(response.body));
        if (dd.result_code == '0')
          return true;

        return false;
    }
}