<?php
if ( ! defined( 'ABSPATH' ) ) { exit; }

function lt_core_register_shortcodes(){
    add_shortcode('law_firm_enquiry_form','lt_core_enquiry_shortcode');
    add_shortcode('law_temple_enquiry_form','lt_core_enquiry_shortcode');
}

function lt_core_enquiry_result_message() {
    $token = isset($_GET['lt_enquiry_result']) ? sanitize_key(wp_unslash($_GET['lt_enquiry_result'])) : '';
    if ( ! $token ) { return array(); }
    $key='lt_enquiry_result_'.$token; $result=get_transient($key); delete_transient($key);
    return is_array($result) ? $result : array();
}

function lt_core_enquiry_shortcode(){
    $external=lt_core_option('external_form_url');
    if($external)return '<a class="lt-button lt-button--primary" href="'.esc_url($external).'" target="_blank" rel="noopener">'.esc_html__('Open enquiry form','law-temple-core').'</a>';
    $result=lt_core_enquiry_result_message();
    ob_start();
    if($result){echo '<div class="lt-form-message lt-form-message--'.esc_attr(!empty($result['success'])?'success':'error').'" role="status" aria-live="polite">'.esc_html($result['message']??'').'</div>';}
    $privacy=absint(lt_core_option('privacy_page_id')); $consent=lt_core_option('consent_text');
    $redirect=is_singular()?get_permalink():home_url('/');
    ?>
    <form id="lt-enquiry-form" class="lt-enquiry-form" method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>" enctype="multipart/form-data" novalidate>
      <?php wp_nonce_field('lt_enquiry_submit','lt_enquiry_nonce'); ?>
      <input type="hidden" name="action" value="lt_enquiry_submit">
      <input type="hidden" name="redirect_to" value="<?php echo esc_url($redirect); ?>">
      <div class="lt-hp" aria-hidden="true"><label><?php esc_html_e('Website','law-temple-core'); ?><input type="text" name="website" tabindex="-1" autocomplete="off"></label></div>
      <div class="lt-form-grid">
        <label><?php esc_html_e('Full name','law-temple-core'); ?><input required name="name" autocomplete="name"></label>
        <label><?php esc_html_e('Organisation','law-temple-core'); ?><input name="organisation" autocomplete="organization"></label>
        <label><?php esc_html_e('Email','law-temple-core'); ?><input required type="email" name="email" autocomplete="email"></label>
        <label><?php esc_html_e('Telephone','law-temple-core'); ?><input name="phone" autocomplete="tel"></label>
        <label><?php esc_html_e('Country','law-temple-core'); ?><input name="country" autocomplete="country-name"></label>
        <?php echo lt_core_enquiry_category_select(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
        <?php echo lt_core_enquiry_select('practice',__('Practice Area','law-temple-core'),'practice'); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
        <?php echo lt_core_enquiry_select('lawyer',__('Preferred professional','law-temple-core'),'lawyer'); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
        <?php echo lt_core_enquiry_select('office',__('Preferred office','law-temple-core'),'office'); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
      </div>
      <label><?php esc_html_e('Message','law-temple-core'); ?><textarea required name="message" rows="7"></textarea></label>
      <?php if(lt_core_option('allow_file_upload')): ?><label><?php esc_html_e('Optional document (PDF only; max 5 MB)','law-temple-core'); ?><input type="file" name="attachment" accept="application/pdf,.pdf"></label><?php endif; ?>
      <label class="lt-consent"><input required type="checkbox" name="consent" value="1"> <span><?php echo esc_html($consent); ?><?php if($privacy): ?> <a href="<?php echo esc_url(get_permalink($privacy)); ?>"><?php esc_html_e('Privacy Notice','law-temple-core'); ?></a><?php endif; ?></span></label>
      <p class="lt-form-disclaimer"><?php esc_html_e('Submitting this form does not by itself create a lawyer-client relationship. Do not submit highly confidential information until the firm confirms that it can act.','law-temple-core'); ?></p>
      <button class="lt-button lt-button--primary" type="submit"><?php esc_html_e('Submit enquiry','law-temple-core'); ?></button>
    </form><?php
    return ob_get_clean();
}

function lt_core_enquiry_category_select(){
    $raw=trim((string)lt_core_option('enquiry_categories')); if(!$raw)return '';
    $items=array_values(array_filter(array_map('trim',preg_split('/\r\n|\r|\n/',$raw)))); if(!$items)return '';
    $html='<label>'.esc_html__('Enquiry category','law-temple-core').'<select name="category"><option value="">'.esc_html__('Select category','law-temple-core').'</option>';
    foreach($items as $item)$html.='<option value="'.esc_attr($item).'">'.esc_html($item).'</option>';
    return $html.'</select></label>';
}

function lt_core_enquiry_select($name,$label,$post_type){
    $items=get_posts(array('post_type'=>$post_type,'post_status'=>'publish','posts_per_page'=>200,'orderby'=>'menu_order title','order'=>'ASC','no_found_rows'=>true));
    $html='<label>'.esc_html($label).'<select name="'.esc_attr($name).'"><option value="0">'.esc_html__('No preference','law-temple-core').'</option>';
    foreach($items as $i)$html.='<option value="'.absint($i->ID).'">'.esc_html($i->post_title).'</option>';
    return $html.'</select></label>';
}

function lt_core_enquiry_admin_post(){
    $result=lt_core_handle_enquiry();
    $token=sanitize_key(wp_generate_password(24,false,false));
    set_transient('lt_enquiry_result_'.$token,$result,10*MINUTE_IN_SECONDS);
    $raw=isset($_POST['redirect_to'])?esc_url_raw(wp_unslash($_POST['redirect_to'])):'';
    $redirect=wp_validate_redirect($raw,home_url('/'));
    $redirect=add_query_arg('lt_enquiry_result',$token,remove_query_arg('lt_enquiry_result',$redirect));
    wp_safe_redirect($redirect.'#lt-enquiry-form',303); exit;
}
add_action('admin_post_nopriv_lt_enquiry_submit','lt_core_enquiry_admin_post');
add_action('admin_post_lt_enquiry_submit','lt_core_enquiry_admin_post');

function lt_core_handle_enquiry(){
    if(!isset($_POST['lt_enquiry_nonce'])||!wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['lt_enquiry_nonce'])),'lt_enquiry_submit'))return array('success'=>false,'message'=>__('Security check failed. Please refresh and try again.','law-temple-core'));
    if(!empty($_POST['website']))return array('success'=>false,'message'=>__('Unable to process this enquiry.','law-temple-core'));
    $ip=isset($_SERVER['REMOTE_ADDR'])?sanitize_text_field(wp_unslash($_SERVER['REMOTE_ADDR'])):'unknown';
    $key='lt_enquiry_'.hash('sha256',$ip.'|'.wp_salt('nonce'));$count=absint(get_transient($key));
    if($count>=5)return array('success'=>false,'message'=>__('Too many submissions. Please try again later.','law-temple-core'));
    set_transient($key,$count+1,HOUR_IN_SECONDS);
    $name=sanitize_text_field(wp_unslash($_POST['name']??''));$org=sanitize_text_field(wp_unslash($_POST['organisation']??''));$email=sanitize_email(wp_unslash($_POST['email']??''));$phone=sanitize_text_field(wp_unslash($_POST['phone']??''));$country=sanitize_text_field(wp_unslash($_POST['country']??''));$category=sanitize_text_field(wp_unslash($_POST['category']??''));$message=sanitize_textarea_field(wp_unslash($_POST['message']??''));$consent=!empty($_POST['consent']);
    if(!$name||!is_email($email)||!$message||!$consent)return array('success'=>false,'message'=>__('Please complete all required fields and provide a valid email address.','law-temple-core'));
    $practice=absint($_POST['practice']??0);$lawyer=absint($_POST['lawyer']??0);$office=absint($_POST['office']??0);
    $lines=array('Name: '.$name,'Organisation: '.$org,'Email: '.$email,'Telephone: '.$phone,'Country: '.$country,'Category: '.$category,'Practice: '.($practice?get_the_title($practice):'No preference'),'Preferred professional: '.($lawyer?get_the_title($lawyer):'No preference'),'Preferred office: '.($office?get_the_title($office):'No preference'),'','Message:',$message);
    $payload=array('name'=>$name,'organisation'=>$org,'email'=>$email,'phone'=>$phone,'country'=>$country,'category'=>$category,'message'=>$message,'practice'=>$practice,'lawyer'=>$lawyer,'office'=>$office);$payload=apply_filters('lt_core_enquiry_payload',$payload);
    $recipient=apply_filters('lt_core_enquiry_recipient',lt_core_option('enquiry_recipient')?:get_option('admin_email'),$payload);$subject=trim(lt_core_option('enquiry_subject_prefix').' - '.$name);$headers=array('Reply-To: '.$name.' <'.$email.'>');$cc=lt_core_option('enquiry_cc');if($cc){foreach(explode(',',$cc) as $c)if(is_email(trim($c)))$headers[]='Cc: '.trim($c);}
    $attachments=array();$temp='';
    if(lt_core_option('allow_file_upload')&&!empty($_FILES['attachment']['name'])){
        $upload=lt_core_handle_enquiry_upload($_FILES['attachment']);
        if(is_wp_error($upload))return array('success'=>false,'message'=>$upload->get_error_message());
        if($upload){$temp=$upload;$attachments[]=$upload;}
    }
    $sent=wp_mail($recipient,$subject,implode("\n",$lines),$headers,$attachments);
    if($temp&&file_exists($temp))wp_delete_file($temp);
    do_action('lt_core_enquiry_processed',$payload,$sent);
    return array('success'=>(bool)$sent,'message'=>$sent?lt_core_option('enquiry_confirmation'):__('The message could not be sent. Please contact the firm by telephone or email.','law-temple-core'));
}

function lt_core_handle_enquiry_upload($file){
    if(empty($file['tmp_name'])||UPLOAD_ERR_OK!==(int)$file['error'])return new WP_Error('upload',__('The uploaded file could not be processed.','law-temple-core'));
    $max=(int)apply_filters('lt_core_enquiry_max_file_size',5*MB_IN_BYTES); if((int)$file['size']>$max)return new WP_Error('size',__('The file is larger than the permitted upload size.','law-temple-core'));
    $allowed=apply_filters('lt_core_enquiry_allowed_mimes',array('pdf'=>'application/pdf'));
    $checked=wp_check_filetype_and_ext($file['tmp_name'],sanitize_file_name($file['name']),$allowed);
    if(empty($checked['ext'])||empty($checked['type'])||!isset($allowed[$checked['ext']]))return new WP_Error('type',__('Only approved PDF documents can be attached.','law-temple-core'));
    if(function_exists('finfo_open')){ $f=finfo_open(FILEINFO_MIME_TYPE); $actual=$f?finfo_file($f,$file['tmp_name']):''; if($f)finfo_close($f); if($actual&&'application/pdf'!==$actual)return new WP_Error('type',__('The uploaded file does not appear to be a valid PDF.','law-temple-core')); }
    if(!is_uploaded_file($file['tmp_name']))return new WP_Error('upload',__('The uploaded file could not be verified.','law-temple-core'));
    $dir=trailingslashit(get_temp_dir()).'law-temple-enquiries'; if(!wp_mkdir_p($dir))return new WP_Error('upload',__('A secure temporary upload location could not be created.','law-temple-core'));
    if(!file_exists($dir.'/index.php'))@file_put_contents($dir.'/index.php',"<?php\n// Silence is golden.\n");
    if(!file_exists($dir.'/.htaccess'))@file_put_contents($dir.'/.htaccess',"Deny from all\n");
    $path=trailingslashit($dir).wp_generate_password(36,false,false).'.'.$checked['ext'];
    if(!move_uploaded_file($file['tmp_name'],$path))return new WP_Error('upload',__('The uploaded document could not be moved to secure temporary storage.','law-temple-core'));
    @chmod($path,0600);
    $scan=apply_filters('lt_core_enquiry_scan_file',true,$path,$checked['type'],$file);
    if(is_wp_error($scan)){wp_delete_file($path);return $scan;} if(false===$scan){wp_delete_file($path);return new WP_Error('scan',__('The uploaded document did not pass the configured security scan.','law-temple-core'));}
    return $path;
}
