<?php

class API extends MY_Controller
{

    public function __construct()
    {
        parent::__construct();
    }

    public function get_invoice_details($invoice_id = '')
    {
        $invoice = $this->db->where('invoice_id', $invoice_id)->get('orders')->row();

        if ($invoice) {
            return $this->output->set_content_type('application/json')
                ->set_output(json_encode(array(
                    'id' => $invoice->id,
                    'amount' => $invoice->amount
                )));
        }
    }

    /**
     * Endpoint API pour blacklister un utilisateur par email
     * Appelé par un client externe pour blacklist automatique
     * 
     * POST /api/blacklist_user
     * Headers: X-API-Key: <api_key>
     * Body JSON: {"email": "user@example.com", "reason": "optional_reason"}
     */
    public function blacklist_user()
    {
        // Récupérer les données brutes POST/JSON
        $data = json_decode(file_get_contents('php://input'), true);
      
        // Clé API pour sécuriser l'endpoint (à stocker dans config)
        $api_key = $this->config->item('blacklist_api_key');
        if (empty($api_key)) {
            $api_key = 'YGG_BLACKLIST_API_KEY_2024'; // Clé par défaut, à changer en production
        }

        // Vérifier la clé API dans les headers
        $provided_key = $this->input->get_request_header('X-API-Key', TRUE);
        if ($provided_key !== $api_key) {
            return $this->api_response(false, 'Unauthorized', 401);
        }

        // Récupérer l'email depuis les données JSON POST
        $email = isset($data['email']) ? trim($data['email']) : '';
        if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
            return $this->api_response(false, 'Invalid email address', 400);
        }

        // Récupérer la raison (optionnelle)
        $reason = isset($data['reason']) && !empty($data['reason'])
            ? $data['reason']
            : 'external_api_blacklist';

        // Chercher l'utilisateur par email
        $user = $this->db->where('email', $email)->get('users')->row();

        if (!$user) {
            return $this->api_response(false, 'User not found', 404);
        }

        // Vérifier si déjà en blacklist
        if ($this->check_user_blacklist($user->id)) {
            return $this->api_response(true, 'User already blacklisted', 200, [
                'user_id' => $user->id,
                'email' => $email,
                'already_blacklisted' => true
            ]);
        }

        // Ajouter à la blacklist
        $this->add_user_to_blacklist($user->id, 'external_api', [
            'reason' => $reason,
            'email' => $email,
            'timestamp' => date('Y-m-d H:i:s')
        ]);

        return $this->api_response(true, 'User blacklisted successfully', 200, [
            'user_id' => $user->id,
            'email' => $email,
            'blacklisted' => true
        ]);
    }

    /**
     * Helper pour les réponses API
     */
    private function api_response($success, $message, $http_code = 200, $data = [])
    {
        return $this->output
            ->set_status_header($http_code)
            ->set_content_type('application/json')
            ->set_output(json_encode(array_merge([
                'success' => $success,
                'message' => $message
            ], $data)));
    }

    /**
     * Vérifier si un utilisateur est en blacklist
     */
    private function check_user_blacklist($user_id)
    {   
        $query = $this->db->where('user_id', $user_id)->get('payment_blacklist');
        return $query->num_rows() > 0;
    }

    /**
     * Ajouter un utilisateur à la blacklist
     */
    private function add_user_to_blacklist($user_id, $trigger_type, $trigger_data = [])
    {
        // Vérifier si l'utilisateur n'est pas déjà en blacklist
        if (!$this->check_user_blacklist($user_id)) {
            $data = [
                'user_id' => $user_id,
                'trigger_type' => $trigger_type,
                'trigger_data' => json_encode($trigger_data),
                'created_at' => time(),
                'updated_at' => time()
            ];
            
            $this->db->insert('payment_blacklist', $data);
        }
    }
}
