<?php

namespace App\Services;

use App\Models\DetailTransaksiStiker;
use App\Models\TransaksiStiker;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

class MakeStikerServices
{
    public function stikerExtend($sticker, Carbon $awal, Carbon $akhir)
    {
        Log::info(json_encode($sticker));
        return DB::transaction(function () use ($sticker) {

            // LOCK index agar aman
            $index = DB::table('indexnum')
                ->where('nama', 'sticker')
                ->lockForUpdate()
                ->first();

            $nextIndex = str_pad($index->value + 1, 4, '0', STR_PAD_LEFT);

            // update index
            DB::table('indexnum')
                ->where('nama', 'sticker')
                ->update(['value' => $nextIndex]);

            $notrans = sprintf(
                '%s/STK/%s/%s',
                $nextIndex,
                Carbon::now()->format('m'),
                Carbon::now()->format('Y')
            );

            $transStiker = TransaksiStiker::where('notrans', $sticker->notrans)->first();
            $detailTransStiker = DetailTransaksiStiker::where('notrans', $sticker->notrans)->first();
            Log::info(json_encode($transStiker));
            Log::info(json_encode($detailTransStiker));
            // HEADER
            DB::table('transaksi_stiker')->insert([
                'notrans' => $notrans,
                'nama' => $transStiker->nama,
                'alamat' => $transStiker->alamat,
                'telepon' => $transStiker->telepon,
                'jenis_transaksi' => $transStiker->jenis_transaksi,
                'harga' => $transStiker->harga,
                'keterangan' => $transStiker->keterangan,
                'tanggal' => Carbon::now(),
                'awal' => Carbon::now()->startOfMonth(),
                'akhir' => Carbon::now()->endOfMonth(),
                'maks' => $transStiker->maks,
                'no_id' => $transStiker->no_id,
                'unit_kerja' => $transStiker->unit_kerja,
                'no_induk' => $transStiker->no_induk,
                'area' => $transStiker->area,
                'jenis_stiker' => $transStiker->jenis_stiker,
                'unitno' => $transStiker->unitno,
                'exit_pass' => $transStiker->exit_pass,
                'hari_ke' => $transStiker->hari_ke,
                'jenis_langganan' => $transStiker->jenis_langganan,
                'no_kuitansi' => $transStiker->no_kuitansi,
                'tgl_edited' => Carbon::now(),
                'tipe_exit_pass' => $transStiker->tipe_exit_pass,
                'seq_code' => $transStiker->seq_code,
                'reserved' => $transStiker->reserved,
                'batasan_jam' => $transStiker->batasan_jam,
                'batasan_awal' => $transStiker->batasan_awal,
                'batasan_akhir' => $transStiker->batasan_akhir,
                'asuransi' => $transStiker->asuransi,
                'visitor' => $transStiker->visitor,
            ]);

            // DETAIL
            DB::table('detail_transaksi_stiker')->insert([
                'notrans' => $notrans,
                'nopol' => $detailTransStiker->nopol,
                'jenis_mobil' => $detailTransStiker->jenis_mobil,
                'adm' => $detailTransStiker->adm,
                'kategori' => $detailTransStiker->kategori,
                'jenis_member' => $detailTransStiker->jenis_member,
                'akses' => $detailTransStiker->akses,
                'akses_out' => $detailTransStiker->akses_out,
                'status' => $detailTransStiker->status,
                'merk' => $detailTransStiker->merk,
                'tipe' => $detailTransStiker->tipe,
                'tahun' => $detailTransStiker->tahun,
                'warna' => $detailTransStiker->warna,
                'keterangan' => $detailTransStiker->keterangan,
            ]);

            DB::table('indexnum')
            ->where('nama', 'sticker')
            ->update(['value' => $nextIndex]);

            return $notrans;
        });
    }
}