package com.hpay.hpay_mobile_api.controllers;

import com.hpay.hpay_mobile_api.DTO.CarteClientQrDTO;
import com.hpay.hpay_mobile_api.DTO.ErrorResponse;
import com.hpay.hpay_mobile_api.DTO.SuccessResponse;
import com.hpay.hpay_mobile_api.services.CarteClientQrService;
import com.hpay.hpay_mobile_api.services.CompteService;
import com.hpay.hpay_mobile_api.services.TypeCompteService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;



@RestController
@RequestMapping("/api/compte")
public class CompteController {

    @Autowired
    private CompteService compteService;

    @Autowired
    private TypeCompteService typeCompteService;

    @Autowired
    private CarteClientQrService carteClientQrService;


    @PostMapping("/addCarte/{idCompte}/{idLoginClient}")
    public ResponseEntity<Object> ajouterCarte(
            @PathVariable Long idCompte,
            @PathVariable Long idLoginClient,
            @RequestBody CarteClientQrDTO carteClientQrDTO) {

        // Ajouter la carte au compte
        Object response  = carteClientQrService.ajouterCarteAuCompte(idCompte, idLoginClient, carteClientQrDTO);


        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("/modifyPin/{idCompte}/{idLoginClient}")
    public ResponseEntity<Object> modifyPinCarte(
            @PathVariable Long idCompte,
            @PathVariable Long idLoginClient,
            @RequestBody CarteClientQrDTO carteClientQrDTO) {

        // Ajouter la carte au compte
        Object response  = carteClientQrService.modifyPinCompte(idCompte,idLoginClient, carteClientQrDTO);

        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("/deleteCarte/{idcarteClientQr}/{idLoginClient}")
    public ResponseEntity<Object> deleteCarte(
            @PathVariable Long idcarteClientQr,
            @PathVariable Long idLoginClient,
            @RequestBody CarteClientQrDTO carteClientQrDTO
            ) {

        // Ajouter la carte au compte
        Object response  = carteClientQrService.removeCardCompte(idcarteClientQr,idLoginClient,carteClientQrDTO);

        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("/toggleActive/{idCompte}/{idLoginClient}")
    public ResponseEntity<Object> toggleActiveCompte(
            @PathVariable Long idCompte,
            @PathVariable Long idLoginClient,
            @RequestBody CarteClientQrDTO carteClientQrDTO
            ) {

        // Ajouter la carte au compte
        Object response  = carteClientQrService.toggleActiveCompte(idCompte, idLoginClient,carteClientQrDTO);

        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

    }

    @GetMapping("/{id}")
    public ResponseEntity<?> getCompteById(@PathVariable Long id) {
        return compteService.findById(id)
                .map(compte -> ResponseEntity.ok(compte))
                .orElseGet(() -> ResponseEntity.notFound().build());
    }

}