<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        $this->transformTemplate(function ($html) {
            // Replace hardcoded "Carte de crédit" with the template variable
            $html = str_replace(
                'Carte de cr&eacute;dit',
                '{{mode_paiement}}',
                $html
            );

            // Add address2 to delivery address
            $html = str_replace(
                '{{livraison_adresse}}<br />{{livraison_cp}} {{livraison_ville}}',
                '{{livraison_adresse}}{{#livraison_adresse2}}<br />{{livraison_adresse2}}{{/livraison_adresse2}}<br />{{livraison_cp}} {{livraison_ville}}',
                $html
            );

            // Add address2 to billing address
            $html = str_replace(
                '{{facturation_adresse}}<br />{{facturation_cp}} {{facturation_ville}}',
                '{{facturation_adresse}}{{#facturation_adresse2}}<br />{{facturation_adresse2}}{{/facturation_adresse2}}<br />{{facturation_cp}} {{facturation_ville}}',
                $html
            );

            return $html;
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        $this->transformTemplate(function ($html) {
            $html = str_replace(
                '{{mode_paiement}}',
                'Carte de cr&eacute;dit',
                $html
            );

            $html = str_replace(
                '{{livraison_adresse}}{{#livraison_adresse2}}<br />{{livraison_adresse2}}{{/livraison_adresse2}}<br />{{livraison_cp}} {{livraison_ville}}',
                '{{livraison_adresse}}<br />{{livraison_cp}} {{livraison_ville}}',
                $html
            );

            $html = str_replace(
                '{{facturation_adresse}}{{#facturation_adresse2}}<br />{{facturation_adresse2}}{{/facturation_adresse2}}<br />{{facturation_cp}} {{facturation_ville}}',
                '{{facturation_adresse}}<br />{{facturation_cp}} {{facturation_ville}}',
                $html
            );

            return $html;
        });
    }

    private function transformTemplate(callable $transform): void
    {
        $template = DB::table('mail_templates')
            ->where('mailable', 'App\\Mail\\ConfirmationCommande')
            ->first();

        if (! $template) {
            return;
        }

        $translations = json_decode($template->html_template, true);

        foreach ($translations as $lang => $html) {
            $translations[$lang] = $transform($html);
        }

        DB::table('mail_templates')
            ->where('id', $template->id)
            ->update(['html_template' => json_encode($translations, JSON_UNESCAPED_UNICODE)]);
    }
};
