package com.hpay.hpay_mobile_api.controllers;

import com.hpay.hpay_mobile_api.services.KycService;
import com.hpay.hpay_mobile_api.services.S3Service;
import io.swagger.v3.oas.annotations.Operation;
import com.hpay.hpay_mobile_api.DTO.*;
import com.hpay.hpay_mobile_api.services.AuthService;
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.Date;
import java.util.HashMap;
import java.util.Map;

@SuppressWarnings("ALL")
@RestController
@RequestMapping("/api/kyc")
public class KycController {

    @Autowired
    private AuthService authService;

    @Autowired
    private KycService kycService;

    // Endpoint to upload a photo for a client
    @PostMapping("/save")
    public Object saveKyc(

            @RequestParam("id") Integer id,
            @RequestParam("nom") String nom,
            @RequestParam("prenom") String prenom,
            @RequestParam("genre") String genre,
            @RequestParam("statut_mat") String statut_mat,
            @RequestParam("date_naiss") String date_naiss,
            @RequestParam("lieu_naiss") String lieu_naiss,
            @RequestParam("nationalite") String nationalite,
            @RequestParam("address") String address,
            @RequestParam("pays_id") Integer pays_id,
            @RequestParam("ville _id") Integer ville_id,
            @RequestParam("telephone1") String telephone1,
            @RequestParam("telephone2") String telephone2,
            @RequestParam("id_type") Integer id_type,
            @RequestParam("numero_id") String numero_id,
            @RequestParam("expire_piece") String expire_piece,
            @RequestParam("recto") MultipartFile recto,
            @RequestParam(value="verso", required = false) MultipartFile verso

    ) throws IOException, ParseException {

        KycSaveRequest request = new KycSaveRequest();
        request.setId(id);
        request.setNom(nom);
        request.setPrenom(prenom);
        request.setGenre(genre);
        request.setStatut_mat(statut_mat);
        request.setDate_naiss(date_naiss);
        request.setNationalite(nationalite);
        request.setPays_id(pays_id);
        request.setVille_id(ville_id);
        request.setAddress(address);
        request.setTelephone1(telephone1);
        request.setTelephone2(telephone2);
        request.setId_type(id_type);
        request.setNumero_id(numero_id);
        request.setRecto(recto);
        request.setVerso(verso);
        request.setLieu_naiss(lieu_naiss);
        request.setDate_exp(expire_piece);


        Object response = kycService.saveKycInfo(request);



        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("/updateStatus")
    public Object updateEmail(@RequestBody Map<String, Object> userData) {

        Long idClient = Long.valueOf ((String) userData.get("idClient"));
        String status = (String) userData.get("status");

        System.out.println(status);
        System.out.println(idClient);

        Object response  = kycService.UpdateKycStatus(idClient, status);

        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
    }




    private String getFileExtension(File file) {
        String name = file.getName();
        String extension = "";
        int i = name.lastIndexOf('.');
        if (i > 0) {
            extension = name.substring(i + 1);
        }
        return extension.toLowerCase();
    }



}


