package com.hpay.hpay_mobile_api.controllers;

import com.hpay.hpay_mobile_api.DTO.*;
import com.hpay.hpay_mobile_api.entities.VirementInterne;
import com.hpay.hpay_mobile_api.services.VirementInterneService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.data.domain.Page;

import java.time.LocalDateTime;

@RestController
@RequestMapping("/api/virement")
public class VirementInterneController {

    @Autowired
    private VirementInterneService virementInterneService;


    @PostMapping("/enregistrer")
    public ResponseEntity<Object>  saveVirement(@RequestBody VirementInterneDTO virementInterneDTO) {


        // Enregistrement du virement via le service
        Object response  = virementInterneService.saveVirement(virementInterneDTO);

        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("/historique")
    public ResponseEntity<Page<VirementInterneDTO>> getHistoriqueVirements(
            @RequestParam(required = false) Long idClient,
            @RequestParam(required = false) Long idCompte,
            @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime startDate,
            @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endDate,
            @RequestParam(defaultValue = "asc") String sortDirection,
            @RequestParam(defaultValue = "0") int page,
            @RequestParam(defaultValue = "10") int size
    ) {
        Page<VirementInterneDTO> result = virementInterneService.getHistorique(
                idClient,
                idCompte,
                startDate,
                endDate,
                sortDirection,
                page,
                size
        );
        return ResponseEntity.ok(result);
    }



}
