package com.hpay.hpay_mobile_api.controllers;

import com.hpay.hpay_mobile_api.DTO.*;
import com.hpay.hpay_mobile_api.services.AuthService;
import com.hpay.hpay_mobile_api.services.BeneficiaireService;
import com.hpay.hpay_mobile_api.services.S3Service;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;


@SuppressWarnings("ALL")
@RestController
@RequestMapping("/api/benef")
public class BeneficiaireController {

    @Autowired
    private BeneficiaireService beneficiaireService;



    @PostMapping("/add")
    public ResponseEntity<Object> addBenef(@RequestBody Map<String, Object> requestData) {

        Long idClient = Long.valueOf ((Integer)requestData.get("idclient"));
        Long idBeneficiaire = Long.valueOf ((Integer) requestData.get("idbenef"));

        Object response = beneficiaireService.AddBenef(idClient,idBeneficiaire );

        if (response instanceof SuccessResponse) {
            return ResponseEntity.status(200).body(response);  // Return success response with user data
        } else if (response instanceof ErrorResponse) {
            ErrorResponse errorResponse = (ErrorResponse) response;
            return ResponseEntity.status(errorResponse.getStatusCode()).body(errorResponse);  // Return error response
        }

        return ResponseEntity.status(400).body(new ErrorResponse("Unknown error", 400)); // Default error response
    }


    // request code for password recover
    @GetMapping("/list/{idclient}")
    public Object getBeneficiaireByClientId(@PathVariable Long idclient) {

        Object response = beneficiaireService.getBeneficiaires(idclient);

        if (response instanceof SuccessResponse) {
            return ResponseEntity.status(200).body(response);  // Return success response with user data
        } else if (response instanceof ErrorResponse) {
            ErrorResponse errorResponse = (ErrorResponse) response;
            return ResponseEntity.status(errorResponse.getStatusCode()).body(errorResponse);  // Return error response
        }

        return ResponseEntity.status(400).body(new ErrorResponse("Unknown error", 400));

    }



    @PostMapping("/remove")
    public ResponseEntity<Object> removeBenef(@RequestBody Map<String, Object> requestData) {

        Long idClient = Long.valueOf ((String) requestData.get("idclient"));
        Long idBeneficiaire = Long.valueOf ((String) requestData.get("idbenef"));

        Object response = beneficiaireService.removeBeneficiaire(idClient,idBeneficiaire );

        if (response instanceof SuccessResponse) {
            return ResponseEntity.status(200).body(response);  // Return success response with user data
        } else if (response instanceof ErrorResponse) {
            ErrorResponse errorResponse = (ErrorResponse) response;
            return ResponseEntity.status(errorResponse.getStatusCode()).body(errorResponse);  // Return error response
        }

        return ResponseEntity.status(400).body(new ErrorResponse("Unknown error", 400)); // Default error response
    }


    @PostMapping("/incontact/list")
    public ResponseEntity<Object> getNoInBeneficiaire(@RequestBody Map<String, Object> requestData) {

        Long idClient = Long.valueOf ((Integer) requestData.get("idclient"));
        List listNumeros  = new ArrayList((Collection) requestData.get("list"));
        Object response = beneficiaireService.getContactsClient(idClient, listNumeros);


        if (response instanceof SuccessResponse) {
            return ResponseEntity.status(200).body(response);  // Return success response with user data
        } else if (response instanceof ErrorResponse) {
            ErrorResponse errorResponse = (ErrorResponse) response;
            return ResponseEntity.status(errorResponse.getStatusCode()).body(errorResponse);  // Return error response
        }

        return ResponseEntity.status(400).body(new ErrorResponse("Unknown error", 400)); // Default error response

    }




    // Méthode pour ajouter des bénéficiaires à un client
    @PostMapping("/incontact/list/add/{loginClientId}")
    public ResponseEntity<Object> addBeneficiaires(@PathVariable Long loginClientId, @RequestBody Map<String, Object> requestData) {

        List listIds  = new ArrayList((Collection) requestData.get("beneficiaireIds"));

      //  System.out.println(listIds);

        Object response = beneficiaireService.addBeneficiairesToClient(loginClientId,listIds);

        if (response instanceof SuccessResponse) {
            return ResponseEntity.status(200).body(response);  // Return success response with user data
        } else if (response instanceof ErrorResponse) {
            ErrorResponse errorResponse = (ErrorResponse) response;
            return ResponseEntity.status(errorResponse.getStatusCode()).body(errorResponse);  // Return error response
        }

        return ResponseEntity.status(400).body(new ErrorResponse("Unknown error", 400)); // Default error response

    }








}

