const depositService = require('../services/deposit.service');
const { OK, Created } = require('../core/success.response');

const depositController = {
    // Public: Get all card types
    getCardTypes: async (req, res) => {
        const cardTypes = await depositService.getCardTypes();
        return new OK({
            message: 'Lấy danh sách loại thẻ thành công',
            metadata: cardTypes,
        }).send(res);
    },

    // Admin: Get all raw configs
    getAllCardConfigs: async (req, res) => {
        const configs = await depositService.getAllCardConfigs();
        return new OK({
            message: 'Lấy danh sách cấu hình thẻ thành công',
            metadata: configs,
        }).send(res);
    },

    // Admin: Update/Create single card config
    updateCardConfig: async (req, res) => {
        const updated = await depositService.updateCardConfig(req.body);
        return new OK({
            message: 'Cập nhật cấu hình thẻ thành công',
            metadata: updated,
        }).send(res);
    },

    createQRBank: async (req, res) => {
        const userId = req.user.id;
        const { amount } = req.body;
        const result = await depositService.createQRBank(userId, amount);
        return new Created({
            message: 'Tạo mã QR thành công',
            metadata: result,
        }).send(res);
    },

    checkBankQR: async (req, res) => {
        const { order_description, order_amount } = req.body.order;
        const result = await depositService.checkBankQR(order_description, Number(order_amount));
        return new OK({
            message: 'Kiểm tra mã QR thành công',
            metadata: result,
        }).send(res);
    },

    // User: Create deposit request
    createDeposit: async (req, res) => {
        const userId = req.user.id;
        const newDeposit = await depositService.createDeposit(userId, req.body);
        return new Created({
            message: 'Yêu cầu nạp tiền đã được tạo',
            metadata: newDeposit,
        }).send(res);
    },

    // Admin: Update deposit status
    updateDepositStatus: async (req, res) => {
        const deposit = await depositService.updateDepositStatus(req.params.id, req.body.status);
        return new OK({
            message: 'Yêu cầu nạp tiền đã được cập nhật',
            metadata: deposit,
        }).send(res);
    },

    // Admin: Get all deposits
    getAllDeposits: async (req, res) => {
        const deposits = await depositService.getAllDeposits();
        return new OK({
            message: 'Lấy danh sách yêu cầu nạp tiền thành công',
            metadata: deposits,
        }).send(res);
    },

    // User: Get personal history
    getUserHistory: async (req, res) => {
        const userId = req.user.id;
        const deposits = await depositService.getUserDeposits(userId);
        const transactions = await depositService.getUserTransactions(userId);
        const stats = await depositService.getUserStats(userId);

        return new OK({
            message: 'Lấy lịch sử giao dịch thành công',
            metadata: {
                deposits,
                transactions,
                stats,
            },
        }).send(res);
    },

    checkTsr: async (req, res) => {
        console.log(req.query);

        const { status, request_id } = req.query;
        const result = await depositService.checkTSRService(status, request_id);
        return new OK({
            message: 'Kiểm tra mã QR thành công',
            metadata: result,
        }).send(res);
    },
};

module.exports = depositController;
