import 'package:cross_file/cross_file.dart'; import 'package:dio/dio.dart'; import 'package:hoshan/core/services/api/dio_service.dart'; import 'package:hoshan/core/utils/strings.dart'; import 'package:hoshan/data/model/auth/login_model.dart'; import 'package:hoshan/data/model/auth/user_info_model.dart'; import 'package:hoshan/data/model/report_model.dart'; import 'package:shamsi_date/shamsi_date.dart'; class AuthRepository { static final DioService _dioService = DioService(); static Future getUserInfo() async { try { Response response = await _dioService.sendRequest().get(DioService.getInfo); return UserInfoModel.fromJson(response.data); } catch (ex) { rethrow; } } // static Future registerUser(String number) async { // try { // Response response = await _dioService.sendRequest().post( // DioService.register, // data: {'mobile_number': number.convertToEnglishNumber()}); // return response; // } catch (ex) { // rethrow; // } // } static Future sendOtp(String number) async { try { Response response = await _dioService.sendRequest().post( DioService.sendOTP, data: {'mobile_number': number.convertToEnglishNumber()}); return response.data['is_new']; } catch (ex) { rethrow; } } static Future loginWithPassword( String number, String password) async { try { Response response = await _dioService.sendRequest().post( DioService.loginWithPassword, data: {'username': number, 'password': password}); return LoginModel.fromJson(response.data); } catch (ex) { rethrow; } } static Future loginWithOTP(String number, String otp) async { try { Response response = await _dioService.sendRequest().post( DioService.loginWithOTP, data: {"mobile_number": number.convertToEnglishNumber(), "otp": otp}); return LoginModel.fromJson(response.data); } catch (ex) { rethrow; } } static Future checkUsernameIsValid(String username) async { try { Response response = await _dioService .sendRequest() .post(DioService.checkUsername, data: {"username": username}); return response.data['available']; } catch (ex) { rethrow; } } static Future editUsername(String username) async { try { Response response = await _dioService .sendRequest() .put(DioService.editUsername, data: {"username": username}); return (response.statusCode!) >= 200 && (response.statusCode!) < 300; } catch (ex) { return false; } } static Future editImageProfile(XFile image) async { try { FormData formData = FormData(); MultipartFile multipartFile = await DioService.getMultipartFile(image); formData.files.add(MapEntry('file', multipartFile)); Response response = await _dioService .sendRequest() .put(DioService.editProfile, data: formData); return (response.statusCode!) >= 200 && (response.statusCode!) < 300; } catch (ex) { return false; } } static Future editPasswordProfile(String password) async { try { Response response = await _dioService .sendRequest() .put(DioService.editPassword, data: {"password": password}); return (response.statusCode!) >= 200 && (response.statusCode!) < 300; } catch (ex) { return false; } } static Future editCardNumber(String? cardNumber) async { try { Response response = await _dioService .sendRequest() .put(DioService.cardNumber, data: {"card_number": cardNumber}); return (response.statusCode!) >= 200 && (response.statusCode!) < 300; } catch (ex) { return false; } } static Future checkGiftCode(String code) async { try { Response response = await _dioService .sendRequest() .post(DioService.giftCode, data: {"code": code}); return response.data['detail']; } catch (ex) { rethrow; } } static Future getReport({required Jalali? startDate}) async { try { startDate ??= Jalali.now(); final shamsiYear = startDate.year; final shamsiMounth = startDate.month; startDate = Jalali(shamsiYear, shamsiMounth, 1); Jalali endDate = Jalali( shamsiYear, shamsiMounth + 1 > 12 ? 12 : shamsiMounth + 1, shamsiMounth + 1 > 12 ? 30 : 1) .addDays(-1); Gregorian sMiladiDate = startDate.toGregorian(); Gregorian eMiladiDate = endDate.toGregorian(); String sDate = '${sMiladiDate.year}-${sMiladiDate.month.toString().padLeft(2, '0')}-${sMiladiDate.day.toString().padLeft(2, '0')}'; String eDate = '${eMiladiDate.year}-${eMiladiDate.month.toString().padLeft(2, '0')}-${eMiladiDate.day.toString().padLeft(2, '0')}'; Response response = await _dioService.sendRequest().get( DioService.reportPeriodic, queryParameters: {'start_date': sDate, 'end_date': eDate}); return ReportModel.fromJson(response.data); } catch (ex) { rethrow; } } static Future getReportCoin({required Jalali? startDate}) async { try { startDate ??= Jalali.now(); final shamsiYear = startDate.year; final shamsiMounth = startDate.month; startDate = Jalali(shamsiYear, shamsiMounth, 1); Jalali endDate = Jalali( shamsiYear, shamsiMounth + 1 > 12 ? 12 : shamsiMounth + 1, shamsiMounth + 1 > 12 ? 30 : 1) .addDays(-1); Gregorian sMiladiDate = startDate.toGregorian(); Gregorian eMiladiDate = endDate.toGregorian(); String sDate = '${sMiladiDate.year}-${sMiladiDate.month.toString().padLeft(2, '0')}-${sMiladiDate.day.toString().padLeft(2, '0')}'; String eDate = '${eMiladiDate.year}-${eMiladiDate.month.toString().padLeft(2, '0')}-${eMiladiDate.day.toString().padLeft(2, '0')}'; Response response = await _dioService.sendRequest().get( DioService.reportPiCoin, queryParameters: {'start_date': sDate, 'end_date': eDate}); return ReportModel.fromJson(response.data); } catch (ex) { rethrow; } } static Future setFCMtoken(String token) async { try { Response response = await _dioService .sendRequest() .put(DioService.fCMtoken, data: {"token": token}); return ReportModel.fromJson(response.data); } catch (ex) { rethrow; } } static Future getRemaining() async { try { Response response = await _dioService.sendRequest().get(DioService.remaining); return response; } catch (ex) { rethrow; } } static Future addSubUser(String mobileNumber, int level) async { try { final number = mobileNumber.convertToEnglishNumber(); Response response = await _dioService.sendRequest().post( DioService.addSubUser, data: { "mobile_number": number, "level": level, }, ); return (response.statusCode!) >= 200 && (response.statusCode!) < 300; } catch (ex) { rethrow; } } static Future deleteSubUser(String id) async { try { final response = await _dioService.sendRequest().delete(DioService.deleteSubUser(id)); return (response.statusCode ?? 500) >= 200 && (response.statusCode ?? 0) < 300; } catch (ex) { rethrow; } } static Future>> getSubUsers() async { try { Response response = await _dioService.sendRequest().get(DioService.getSubUsers); // استخراج لیست کاربران از پاسخ جیسون // ساختار: { "sub_users": [...], "total_count": 1 } List data = response.data['sub_users']; // تبدیل به لیستی از Mapها return List>.from(data); } catch (ex) { rethrow; } } }