<?php
/**
 * Model class <i>SIB_Forms_Lang</i> represents forms language
 *
 * @package SIB_Model
 */

if ( ! class_exists( 'SIB_Forms_Lang' ) ) {
	/**
	 * Class SIB_Forms_Lang
	 */
	class SIB_Forms_Lang {

		/**
		 * Tab table name
		 */
		const TABLE_NAME = 'sib_model_lang';

		/** Create Table */
		public static function createTable() {
			global $wpdb;
			// create list table.
			$creation_query =
				'CREATE TABLE IF NOT EXISTS ' . $wpdb->prefix . self::TABLE_NAME . ' (
                `id` int(20) NOT NULL AUTO_INCREMENT,
                `frmID` int(20) NOT NULL DEFAULT -1,
                `pID` int(20) NOT NULL DEFAULT -1,
                `lang` varchar(120),
                PRIMARY KEY (`id`)
                );';
			require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
			$wpdb->query($creation_query);
		}

		/**
		 * Remove table
		 */
		public static function removeTable() {
			global $wpdb;
			$query = 'DROP TABLE IF EXISTS ' . $wpdb->prefix . self::TABLE_NAME . ';';
			$wpdb->query( $query ); // db call ok; no-cache ok.
		}

		/**
		 * Get form ID by pid and language.
		 *
		 * @param int    $pID - parent form ID.
		 * @param string $lang - language.
		 * @return null
		 */
		public static function get_form_ID( $pID, $lang ) {
			global $wpdb;
			$query = "SHOW TABLES LIKE '" . $wpdb->prefix . self::TABLE_NAME . "'; ";
			if ( $wpdb->get_var( $query ) == $wpdb->prefix . self::TABLE_NAME ) {
                $query = $wpdb->prepare(
                    'SELECT * FROM ' . $wpdb->prefix . self::TABLE_NAME . ' WHERE pID = %d AND lang= %s',
                    array(
                        esc_sql($pID),
                        esc_sql($lang)
                    )
                );
                $results = $wpdb->get_row( $query ); // db call ok; no-cache ok.
				if ( ! empty( $results ) ) {
					return $results->frmID;
				} else {
					return null;
				}
			} else {
				return null;
			}
		}

		/**
		 * Get form language by form id and parent id.
		 *
		 * @param int $frmID - form ID.
		 * @param int $pID - parent form ID.
		 * @return null
		 */
		public static function get_lang( $frmID, $pID ) {
			global $wpdb;
			$query = "SHOW TABLES LIKE '" . $wpdb->prefix . self::TABLE_NAME . "'; ";
			if ( $wpdb->get_var( $query ) == $wpdb->prefix . self::TABLE_NAME ) {
                $sql = $wpdb->prepare(
                    'SELECT * FROM ' . $wpdb->prefix . self::TABLE_NAME . ' WHERE frmID = %d AND pID= %d',
                    array(
                        esc_sql($frmID),
                        esc_sql($pID)
                    )
                );
				$results = $wpdb->get_row( $sql ); // db call ok; no-cache ok.
				if ( ! empty( $results ) ) {
					return $results->lang;
				} else {
					return null;
				}
			} else {
				return null;
			}
		}

		/**
		 *  Add form
		 *
		 * @param int    $frmID - form ID.
		 * @param int    $pid - parent form ID.
		 * @param string $lang - language.
		 * @return null|string
		 */
		public static function add_form_ID( $frmID, $pid, $lang ) {
			// insert.
			global $wpdb;
            $query = $wpdb->prepare(
                'INSERT INTO ' . $wpdb->prefix . self::TABLE_NAME . ' (frmID,pID,lang) VALUES (%d, %d, %s)',
                array(
                    esc_sql($frmID),
                    esc_sql($pid),
                    esc_sql($lang)
                )
            );
			$wpdb->query( $query ); // db call ok; no-cache ok.
			$index = $wpdb->get_var( 'SELECT LAST_INSERT_ID();' ); // db call ok; no-cache ok.
			return $index;
		}

		/**
		 * Check if origin form or translated form
		 *
		 * @param int $frmID - form ID.
		 * @return bool
		 */
		public static function check_form_trans( $frmID ) {
			global $wpdb;
			$query = "SHOW TABLES LIKE '" . $wpdb->prefix . self::TABLE_NAME . "'; ";
			if ( $wpdb->get_var( $query ) == $wpdb->prefix . self::TABLE_NAME ) {
                $sql = $wpdb->prepare(
                    'SELECT * FROM ' . $wpdb->prefix . self::TABLE_NAME . ' WHERE frmID = %d',
                    array(esc_sql($frmID))
                );
				$results = $wpdb->get_row( $sql ); // db call ok; no-cache ok.
				if ( ! empty( $results ) ) {
					return true;
				} else {
					return false;
				}
			} else {
				return false;
			}

        }

		/**
		 * Remove forms
		 *
		 * @param int $pID - parent form ID.
		 */
		public static function remove_trans( $pID ) {
			global $wpdb;
			$query = "SHOW TABLES LIKE '" . $wpdb->prefix . self::TABLE_NAME . "'; ";
			if ( $wpdb->get_var( $query ) == $wpdb->prefix . self::TABLE_NAME ) {
                $query_forms = $wpdb->prepare(
                    'SELECT * FROM ' . $wpdb->prefix . self::TABLE_NAME . ' WHERE pID= %d',
                    array(esc_sql($pID))
                );
                $trans = $wpdb->get_results( $query_forms ); // db call ok; no-cache ok.
				if ( $trans ) {
					foreach ( $trans as $tran ) {
						SIB_Forms::deleteForm( $tran->frmID );
					}
				}
				$wpdb->delete(
					$wpdb->prefix . self::TABLE_NAME,
					array(
						'pID' => $pID,
					)
				);
			}

		}

		/**
		 * Remove all translated forms
		 */
		public static function remove_all_trans() {
			global $wpdb;
			$query = "SHOW TABLES LIKE '" . $wpdb->prefix . self::TABLE_NAME . "'; ";
			if ( $wpdb->get_var( $query ) == $wpdb->prefix . self::TABLE_NAME ) {
				$wpdb->query( 'TRUNCATE TABLE ' . $wpdb->prefix . self::TABLE_NAME );
			}
		}
	}
}