# This is a fix for InnoDB in MySQL >= 4.1.x
# It "suspends judgement" for fkey relationships until are tables are set.
SET FOREIGN_KEY_CHECKS = 0;

-- ---------------------------------------------------------------------
-- paypal_customer
-- ---------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `paypal_customer`
(
    `id` INTEGER NOT NULL,
    `paypal_user_id` INTEGER NOT NULL,
    `credit_card_id` VARCHAR(40),
    `name` VARCHAR(255),
    `given_name` VARCHAR(255),
    `family_name` VARCHAR(255),
    `middle_name` VARCHAR(255),
    `picture` VARCHAR(255),
    `email_verified` TINYINT,
    `gender` VARCHAR(255),
    `birthday` VARCHAR(255),
    `zoneinfo` VARCHAR(255),
    `locale` VARCHAR(255),
    `language` VARCHAR(255),
    `verified` TINYINT,
    `phone_number` VARCHAR(255),
    `verified_account` VARCHAR(255),
    `account_type` VARCHAR(255),
    `age_range` VARCHAR(255),
    `payer_id` VARCHAR(255),
    `postal_code` VARCHAR(255),
    `locality` VARCHAR(255),
    `region` VARCHAR(255),
    `country` VARCHAR(255),
    `street_address` VARCHAR(255),
    `created_at` DATETIME,
    `updated_at` DATETIME,
    PRIMARY KEY (`id`,`paypal_user_id`),
    CONSTRAINT `fk_paypal_payer_customer_id`
        FOREIGN KEY (`id`)
        REFERENCES `customer` (`id`)
        ON UPDATE RESTRICT
        ON DELETE CASCADE
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- paypal_planified_payment
-- ---------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `paypal_planified_payment`
(
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `frequency` VARCHAR(255) NOT NULL,
    `frequency_interval` INTEGER NOT NULL,
    `cycle` INTEGER NOT NULL,
    `min_amount` DECIMAL(16,6) DEFAULT 0.000000,
    `max_amount` DECIMAL(16,6) DEFAULT 0.000000,
    `position` INTEGER DEFAULT 0 NOT NULL,
    `created_at` DATETIME,
    `updated_at` DATETIME,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- paypal_cart
-- ---------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `paypal_cart`
(
    `id` INTEGER NOT NULL,
    `credit_card_id` VARCHAR(40),
    `planified_payment_id` INTEGER,
    `express_payment_id` VARCHAR(255),
    `express_payer_id` VARCHAR(255),
    `express_token` VARCHAR(255),
    `created_at` DATETIME,
    `updated_at` DATETIME,
    PRIMARY KEY (`id`),
    INDEX `fi_paypal_cart_planified_payment_id` (`planified_payment_id`),
    CONSTRAINT `fk_paypal_cart_cart_id`
        FOREIGN KEY (`id`)
        REFERENCES `cart` (`id`)
        ON UPDATE RESTRICT
        ON DELETE CASCADE,
    CONSTRAINT `fk_paypal_cart_planified_payment_id`
        FOREIGN KEY (`planified_payment_id`)
        REFERENCES `paypal_planified_payment` (`id`)
        ON UPDATE RESTRICT
        ON DELETE CASCADE
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- paypal_order
-- ---------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `paypal_order`
(
    `id` INTEGER NOT NULL,
    `payment_id` VARCHAR(50),
    `agreement_id` VARCHAR(255),
    `credit_card_id` VARCHAR(40),
    `state` VARCHAR(20),
    `amount` DECIMAL(16,6) DEFAULT 0.000000,
    `description` LONGTEXT,
    `payer_id` VARCHAR(255),
    `token` VARCHAR(255),
    `planified_title` VARCHAR(255) NOT NULL,
    `planified_description` LONGTEXT,
    `planified_frequency` VARCHAR(255) NOT NULL,
    `planified_frequency_interval` INTEGER NOT NULL,
    `planified_cycle` INTEGER NOT NULL,
    `planified_actual_cycle` INTEGER DEFAULT 0 NOT NULL,
    `planified_min_amount` DECIMAL(16,6) DEFAULT 0.000000,
    `planified_max_amount` DECIMAL(16,6) DEFAULT 0.000000,
    `created_at` DATETIME,
    `updated_at` DATETIME,
    PRIMARY KEY (`id`),
    CONSTRAINT `fk_paypal_order_order_id`
        FOREIGN KEY (`id`)
        REFERENCES `order` (`id`)
        ON UPDATE RESTRICT
        ON DELETE CASCADE
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- paypal_plan
-- ---------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `paypal_plan`
(
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `paypal_order_id` INTEGER NOT NULL,
    `plan_id` VARCHAR(255),
    `state` VARCHAR(255),
    `created_at` DATETIME,
    `updated_at` DATETIME,
    PRIMARY KEY (`id`),
    INDEX `fi_paypal_plan_paypal_order_id` (`paypal_order_id`),
    CONSTRAINT `fk_paypal_plan_paypal_order_id`
        FOREIGN KEY (`paypal_order_id`)
        REFERENCES `paypal_order` (`id`)
        ON UPDATE RESTRICT
        ON DELETE CASCADE
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- paypal_log
-- ---------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `paypal_log`
(
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `customer_id` INTEGER,
    `order_id` INTEGER,
    `hook` VARCHAR(255),
    `channel` VARCHAR(255),
    `level` INTEGER,
    `message` LONGTEXT,
    `time` INTEGER,
    `created_at` DATETIME,
    `updated_at` DATETIME,
    PRIMARY KEY (`id`),
    INDEX `fi_paypal_log_customer_id` (`customer_id`),
    INDEX `fi_paypal_log_order_id` (`order_id`),
    CONSTRAINT `fk_paypal_log_customer_id`
        FOREIGN KEY (`customer_id`)
        REFERENCES `customer` (`id`)
        ON UPDATE RESTRICT
        ON DELETE CASCADE,
    CONSTRAINT `fk_paypal_log_order_id`
        FOREIGN KEY (`order_id`)
        REFERENCES `order` (`id`)
        ON UPDATE RESTRICT
        ON DELETE CASCADE
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- paypal_planified_payment_i18n
-- ---------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `paypal_planified_payment_i18n`
(
    `id` INTEGER NOT NULL,
    `locale` VARCHAR(5) DEFAULT 'en_US' NOT NULL,
    `title` VARCHAR(255) NOT NULL,
    `description` LONGTEXT,
    PRIMARY KEY (`id`,`locale`),
    CONSTRAINT `paypal_planified_payment_i18n_fk_c9dfe7`
        FOREIGN KEY (`id`)
        REFERENCES `paypal_planified_payment` (`id`)
        ON DELETE CASCADE
) ENGINE=InnoDB;

# This restores the fkey checks, after having unset them earlier
SET FOREIGN_KEY_CHECKS = 1;
