<?php

namespace Tests\Jobs\Callback;

use App\Jobs\Callback\ReportCharge;
use App\Service\Util\Support\Trace\TraceContext;
use Illuminate\Support\Facades\DB;
use PHPUnit\Framework\TestCase;

class ReportChargeTest extends \Tests\TestCase
{

    public function testHandle()
    {
        $this->prepareData();
        foreach (range(1, 150) as $i) {
            $traceContext = new TraceContext();
            $reportCharge = new ReportCharge(['uid' => 1000 + $i, 'orderId' => 10000 + $i,
                'traceInfo' => $traceContext->getTraceInfo()]);
            $reportCharge->handle();
        }

        foreach (range(151, 163) as $i) {
            $traceContext = new TraceContext();
            $reportCharge = new ReportCharge(['uid' => 1000 + $i -150, 'orderId' => 10000 + $i,
                'traceInfo' => $traceContext->getTraceInfo()]);
            $reportCharge->handle();
        }

        foreach (range(164, 180) as $i) {
            $traceContext = new TraceContext();
            $reportCharge = new ReportCharge(['uid' => 1000 + $i, 'orderId' => 10000 + $i,
                'traceInfo' => $traceContext->getTraceInfo()]);
            $reportCharge->handle();
        }
    }

    private function prepareData() {
        $promotionId = 100;
        $optimizerId = 5;
        foreach(range(1, 150) as $i) {
            $orders[] = [
                'id' => 10000 + $i,
                'uid' => 1000 + $i,
                'promotion_id' => $promotionId,
                'user_id' => $optimizerId,
                'price' => rand(10, 60),
                'pay_product_id' => 1,
                'status' => 'PAID',
                'trade_no' => uniqid(),
                'created_at' => '2023-05-19 14:44:01',
                'updated_at' => date('Y-m-d H:i:s'),
            ];
            $ranses[] = [
                'uid' => 1000 + $i,
                'ranse_id' => 100,
                'callback' => uniqid(),
                'ranse_start_at' => '2023-05-19 14:44:01',
                'ranse_end_at' => '2023-05-19 15:44:01',
                'advertiser_id' => '1234568',
                'adv_promotion_id' => '234',
                'report_result' => '[]',
                'created_at' => date('Y-m-d H:i:s'),
                'updated_at' => date('Y-m-d H:i:s'),
                'ranse_ip' =>'192.168.1.123',
                'optimizer_uid' => 5
            ];
        }

        foreach (range(151, 163) as $i) {
            $orders[] = [
                'id' => 10000 + $i,
                'uid' => 1000 + $i - 150,
                'promotion_id' => $promotionId,
                'user_id' => $optimizerId,
                'price' => rand(40, 70),
                'pay_product_id' => 1,
                'status' => 'PAID',
                'trade_no' => uniqid(),
                'created_at' => '2023-05-19 14:'.(44 + rand(5, 10)),
                'updated_at' => date('Y-m-d H:i:s'),
            ];
        }

        foreach(range(164, 180) as $i) {
            $orders[] = [
                'id' => 10000 + $i,
                'uid' => 1000 + $i,
                'promotion_id' => $promotionId,
                'user_id' => $optimizerId,
                'price' => rand(40, 70),
                'pay_product_id' => 1,
                'status' => 'PAID',
                'trade_no' => uniqid(),
                'created_at' => '2023-05-19 14:44:01',
                'updated_at' => date('Y-m-d H:i:s'),
            ];
            $ranses[] = [
                'uid' => 1000 + $i,
                'ranse_id' => 100,
                'callback' => uniqid(),
                'ranse_start_at' => '2023-05-19 14:44:01',
                'ranse_end_at' => '2023-05-19 15:44:01',
                'advertiser_id' => '1234568',
                'adv_promotion_id' => '234',
                'report_result' => '[]',
                'created_at' => date('Y-m-d H:i:s'),
                'updated_at' => date('Y-m-d H:i:s'),
                'ranse_ip' =>'192.168.1.123',
                'optimizer_uid' => 5
            ];
        }
        DB::table('orders')->where('id', '>=', 10001)->delete();
        DB::table('orders')->insert($orders);
        DB::table('callback_report_ranse_record')->delete();
        DB::table('callback_report_charge_record')->delete();
        DB::table('callback_report_ranse_record')->insert($ranses);
    }
}