<?php
if (!defined('ABSPATH')) exit; // Beveiliging tegen direct toegang

function impofovw_register_custom_post_type($cpt_slug) {
    $labels = [
        'name'               => ucfirst($cpt_slug),
        'singular_name'      => ucfirst($cpt_slug),
        'add_new'            => 'Nieuwe ' . ucfirst($cpt_slug),
        'add_new_item'       => 'Nieuwe ' . ucfirst($cpt_slug) . ' toevoegen',
        'edit_item'          => ucfirst($cpt_slug) . ' bewerken',
        'new_item'           => 'Nieuwe ' . ucfirst($cpt_slug),
        'all_items'          => 'Alle ' . ucfirst($cpt_slug),
        'view_item'          => 'Bekijk ' . ucfirst($cpt_slug),
        'search_items'       => 'Zoek ' . ucfirst($cpt_slug),
        'not_found'          => 'Geen ' . ucfirst($cpt_slug) . ' gevonden',
        'not_found_in_trash' => 'Geen ' . ucfirst($cpt_slug) . ' in prullenbak',
        'menu_name'          => ucfirst($cpt_slug)
    ];

    $args = [
        'labels'       => $labels,
        'public'       => true,
        'has_archive'  => true,
        'show_in_rest' => true,
        'supports'     => ['title', 'editor', 'thumbnail', 'custom-fields'],
		'rewrite' => ['slug' => $cpt_slug], // belangrijk
    ];

    if (!post_type_exists($cpt_slug)) {
        register_post_type($cpt_slug, $args);
    }
}
add_action('init', function() {
	
    $cpt_slug = impofovw_get_cpt_name();
    if ($cpt_slug) {
        impofovw_register_custom_post_type($cpt_slug);
    }
});

add_action('init', function () {
	$cpt = impofovw_get_cpt_name() ?: 'occasion';
	
    // Zet hier je meta keys en taxonomie
    $meta_key_price = 'impofovw_prijs';
    $meta_key_type = 'impofovw_type';

    // Kolomwaarden tonen
    add_action('manage_posts_custom_column', function ($column, $post_id) use ($meta_key_type, $meta_key_price) {
        if ($column === 'cpt_price') {
            $price = get_post_meta($post_id, $meta_key_price, true);
            echo esc_html($price ? number_format_i18n($price, 0) . ' €' : '—');
        }
		
		if ($column === 'cpt_type') {
            $type = get_post_meta($post_id, $meta_key_type, true);
            echo esc_html($type ? $type : '-');
        }
    }, 10, 2);
	
	add_filter("manage_edit-{$cpt}_columns", function($columns) {
		$new = [];
	
		foreach ($columns as $key => $label) {
			$new[$key] = $label;
	
			// Prijs direct na de titel
			if ($key === 'title') {
				$new['cpt_type'] = __('Type', 'importer-for-vwe');
				$new['cpt_price'] = __('Prijs', 'importer-for-vwe');
			}
		}
	
		return $new;
	});

});

function impofovw_register_taxonomies() {
    $cpt = get_option('impofovw_cpt_name','occasions');
	
	register_taxonomy('impofovw_voertuigsoort', $cpt, [
        'labels' => [
            'name' => 'Voertuigsoort',
            'singular_name' => 'Voertuigsoort',
            'search_items' => 'Zoek voertuigsoorten',
            'all_items' => 'Alle voertuigsoorten',
            'edit_item' => 'Voertuigsoort bewerken',
            'add_new_item' => 'Nieuw voertuigsoort toevoegen',
            'menu_name' => 'Voertuigsoorten',
        ],
        'public' => true,
        'hierarchical' => true, // merken zijn meestal geen hiërarchie
        'show_in_rest' => true, // belangrijk voor Gutenberg / REST
    ]);

    register_taxonomy('impofovw_merk', $cpt, [
        'labels' => [
            'name' => 'Merk',
            'singular_name' => 'Merk',
            'search_items' => 'Zoek merken',
            'all_items' => 'Alle merken',
            'edit_item' => 'Merk bewerken',
            'add_new_item' => 'Nieuw merk toevoegen',
            'menu_name' => 'Merken',
        ],
        'public' => true,
        'hierarchical' => true, // merken zijn meestal geen hiërarchie
        'show_in_rest' => true, // belangrijk voor Gutenberg / REST
    ]);
	
	register_taxonomy('impofovw_model', $cpt, [
        'labels' => [
            'name' => 'Model',
            'singular_name' => 'Model',
            'search_items' => 'Zoek modellen',
            'all_items' => 'Alle modellen',
            'edit_item' => 'Model bewerken',
            'add_new_item' => 'Nieuw model toevoegen',
            'menu_name' => 'Modellen',
        ],
        'public' => true,
        'hierarchical' => true, // merken zijn meestal geen hiërarchie
        'show_in_rest' => true, // belangrijk voor Gutenberg / REST
    ]);
	
	register_taxonomy('impofovw_transmissie', $cpt, [
        'labels' => [
            'name' => 'Transmissie',
            'singular_name' => 'Transmissie',
            'search_items' => 'Zoek transmissies',
            'all_items' => 'Alle transmissies',
            'edit_item' => 'Transmissie bewerken',
            'add_new_item' => 'Nieuw transmissie toevoegen',
            'menu_name' => 'Transmissies',
        ],
        'public' => true,
        'hierarchical' => true, // merken zijn meestal geen hiërarchie
        'show_in_rest' => true, // belangrijk voor Gutenberg / REST
    ]);
	
	register_taxonomy('impofovw_brandstof', $cpt, [
        'labels' => [
            'name' => 'Brandstof',
            'singular_name' => 'Brandstof',
            'search_items' => 'Zoek brandstoffen',
            'all_items' => 'Alle brandstoffen',
            'edit_item' => 'Brandstof bewerken',
            'add_new_item' => 'Nieuw brandstof toevoegen',
            'menu_name' => 'Brandstoffen',
        ],
        'public' => true,
        'hierarchical' => true, // merken zijn meestal geen hiërarchie
        'show_in_rest' => true, // belangrijk voor Gutenberg / REST
    ]);
	
	register_taxonomy('impofovw_carrosserie', $cpt, [
        'labels' => [
            'name' => 'Carrosserie',
            'singular_name' => 'Carrosserie',
            'search_items' => 'Zoek carrosserie',
            'all_items' => 'Alle carrosseries',
            'edit_item' => 'Carrosserie bewerken',
            'add_new_item' => 'Nieuw carrosserie toevoegen',
            'menu_name' => 'Carrosseries',
        ],
        'public' => true,
        'hierarchical' => true, // merken zijn meestal geen hiërarchie
        'show_in_rest' => true, // belangrijk voor Gutenberg / REST
    ]);
	
	register_taxonomy('impofovw_basiskleur', $cpt, [
        'labels' => [
            'name' => 'Basiskleur',
            'singular_name' => 'Basiskleur',
            'search_items' => 'Zoek basiskleur',
            'all_items' => 'Alle basiskleuren',
            'edit_item' => 'Basiskleur bewerken',
            'add_new_item' => 'Nieuw basiskleur toevoegen',
            'menu_name' => 'Basiskleuren',
        ],
        'public' => true,
        'hierarchical' => true, // merken zijn meestal geen hiërarchie
        'show_in_rest' => true, // belangrijk voor Gutenberg / REST
    ]);
}
add_action('init', 'impofovw_register_taxonomies');

//function impofovw_register_meta() {
//    $cpt = get_option('impofovw_cpt_name','occasions');
//	
//	register_post_meta($cpt, 'impofovw_prijs', [
//        'type'              => 'number',
//        'single'            => true,
//        'show_in_rest'      => true,
//        'sanitize_callback' => 'floatval',
//        'auth_callback'     => function() {
//            return current_user_can('edit_posts');
//        }
//    ]);
//	
//}
//add_action('init', 'impofovw_register_meta');

// 1. Meta box registreren
add_action('add_meta_boxes', function () {
	$cpt = get_option('impofovw_cpt_name','occasions');
    add_meta_box(
        'occasion_accessoires_box',
        'Accessoires',
        'impofovw_render_occasion_accessoires_box',
        $cpt,  // <-- vervang dit door jouw CPT slug
        'normal',
        'default'
    );
});

add_action('add_meta_boxes', function() {
	$cpt = get_option('impofovw_cpt_name','occasions');
    add_meta_box(
        'impofovw_fotos_metabox',
        'Occasion Foto’s',
        'impofovw_render_fotos_metabox',
        $cpt, // jouw CPT naam
        'side',
        'default'
    );
});

// 2. Meta box renderen
function impofovw_render_fotos_metabox($post) {
    $foto_ids = get_post_meta($post->ID, 'impofovw_occasion_fotos', true);

    if (!empty($foto_ids) && is_array($foto_ids)) {
        echo '<div style="display:flex;flex-wrap:wrap;gap:5px;">';
        foreach ($foto_ids as $id) {
            $thumb = wp_get_attachment_image($id, 'thumbnail', false, [
                'style' => 'width:80px;height:80px;object-fit:cover;border:1px solid #ccc;border-radius:4px;'
            ]);
            echo '<div>' . wp_kses_post($thumb) . '</div>';
        }
        echo '</div>';
    } else {
        echo '<p><em>Geen foto’s gekoppeld.</em></p>';
    }

    echo '<p class="description">Deze foto’s worden automatisch geïmporteerd via de XML. Bewerken kan in de Mediabibliotheek.</p>';
}

function impofovw_render_occasion_accessoires_box($post) {
    // Haal bestaande data op
    $groups = [
        'interieur'  => 'Comfort & Interieur',
        'exterieur'  => 'Exterieur',
        'veiligheid' => 'Veiligheid',
        'overig'     => 'Overig'
    ];

    $saved_data = [];
    foreach ($groups as $key => $label) {
        $saved_data[$key] = get_post_meta($post->ID, 'impofovw_repeater_' . $key, true);
        if (!is_array($saved_data[$key])) {
            $saved_data[$key] = [];
        }
    }

    // Security
    wp_nonce_field('save_occasion_accessoires', 'occasion_accessoires_nonce');
    ?>

    <div class="occasion-accessoires-tabs">
        <ul class="tabs">
            <?php foreach ($groups as $key => $label): ?>
                <li><a href="#tab-<?php echo esc_attr($key); ?>"><?php echo esc_html($label); ?></a></li>
            <?php endforeach; ?>
        </ul>

        <?php foreach ($groups as $key => $label): ?>
            <div id="tab-<?php echo esc_attr($key); ?>" class="tab-content" style="display:none;">
                <table class="widefat occasion-table" id="occasion-<?php echo esc_html($key); ?>-table">
                    <thead>
                        <tr>
                            <th style="width:80px;">Prioriteit</th>
                            <th>Omschrijving</th>
                            <th style="width:40px;">Actie</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($saved_data[$key] as $index => $item): ?>
                            <tr>
                                <td><label type="number" name="<?php echo esc_html($key); ?>[<?php echo esc_html($index); ?>][prioriteit]" value="<?php echo esc_attr($item['prioriteit']); ?>"><?php echo esc_attr($item['prioriteit']); ?></label></td>
                                <td><label type="text" name="<?php echo esc_html($key); ?>[<?php echo esc_html($index); ?>][omschrijving]" value="<?php echo esc_attr($item['omschrijving']); ?>" style="width:100%;"><?php echo esc_attr($item['omschrijving']); ?></label></td>
                            </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            </div>
        <?php endforeach; ?>
    </div>

    <?php
}

// 3. Opslaan
add_action('init', function () {
    $cpt_name = impofovw_get_cpt_name(); // haalt de ingestelde CPT slug op

    add_action("save_post_{$cpt_name}", function ($post_id) {
        if ( ! isset( $_POST['occasion_accessoires_nonce'] ) 
            || ! wp_verify_nonce(
                sanitize_text_field( wp_unslash( $_POST['occasion_accessoires_nonce'] ) ),
                'save_occasion_accessoires'
            )
        ) {
            return;
        }

        if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
        if (!current_user_can('edit_post', $post_id)) return;

        $groups = ['interieur','exterieur','veiligheid','overig'];
        foreach ($groups as $group) {
            if (isset($_POST[$group]) && is_array($_POST[$group])) {
                $clean = [];
                foreach ($_POST[$group] as $row) {
                    $row = wp_unslash($row);
                    if (!empty($row['omschrijving'])) {
                        $clean[] = [
                            'prioriteit'   => isset($row['prioriteit']) ? intval($row['prioriteit']) : 0,
                            'omschrijving' => sanitize_text_field($row['omschrijving']),
                        ];
                    }
                }
                update_post_meta($post_id, '_repeater_' . $group, $clean);
            } else {
                delete_post_meta($post_id, '_repeater_' . $group);
            }
        }
    });
});
